{"meta":{"title":"CodeQL-Arbeitsbereiche","intro":"CodeQL Arbeitsbereiche ermöglichen es Ihnen, mehrere verwandte CodeQL Pakete zusammen zu entwickeln und zu verwalten und Abhängigkeiten zwischen ihnen direkt aus der Quelle aufzulösen.","product":"Sicherheit und Codequalität","breadcrumbs":[{"href":"/de/code-security","title":"Sicherheit und Codequalität"},{"href":"/de/code-security/concepts","title":"Concepts"},{"href":"/de/code-security/concepts/code-scanning","title":"Codeüberprüfung"},{"href":"/de/code-security/concepts/code-scanning/codeql","title":"CodeQL"},{"href":"/de/code-security/concepts/code-scanning/codeql/codeql-workspaces","title":"CodeQL-Arbeitsbereiche"}],"documentType":"article"},"body":"# CodeQL-Arbeitsbereiche\n\nCodeQL Arbeitsbereiche ermöglichen es Ihnen, mehrere verwandte CodeQL Pakete zusammen zu entwickeln und zu verwalten und Abhängigkeiten zwischen ihnen direkt aus der Quelle aufzulösen.\n\n## Informationen zu CodeQL Arbeitsbereichen\n\nEin CodeQL Arbeitsbereich wird in der Regel verwendet, um eine Reihe von Bibliotheks- und Abfragepaketen zu entwickeln, die voneinander abhängen. Wenn Sie einen CodeQL-Arbeitsbereich verwenden, stehen alle CodeQL-Pakete im Arbeitsbereich füreinander als *Quellabhängigkeiten* zur Verfügung, wenn Sie einen CodeQL-Befehl ausführen, der Abfragen auflöst. Dies erleichtert das Entwickeln, Warten und Veröffentlichen mehrerer verwandter CodeQL Pakete. Weitere Informationen zu CodeQL Paketen finden Sie unter [Anpassen der Analyse mit CodeQL-Paketen](/de/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs).\n\nArbeitsbereiche werden häufig in einem einzigen Git-Repository gespeichert, sodass verwandte Pakete gemeinsam entwickelt und veröffentlicht werden können.\n\n## Quellabhängigkeiten\n\nIn einem CodeQL Arbeitsbereich werden alle im Arbeitsbereich enthaltenen Pakete als **Quellabhängigkeiten** voneinander behandelt. Dies bedeutet, dass sie nicht aus dem Paketcache, sondern direkt aus dem CodeQL lokalen Dateisystem aufgelöst werden.\n\nDenn Arbeitsbereichspakete werden von der Quelle aus aufgelöst:\n\n* Lokale Änderungen in einem Paket sind sofort für andere Pakete im Arbeitsbereich sichtbar.\n* Gefundene Abhängigkeiten im Arbeitsbereich überschreiben Versionen im Paketcache.\n* Versionsbeschränkungen in `qlpack.yml` Dateien werden für Arbeitsbereichsabhängigkeiten ignoriert, da die Version durch den Arbeitsbereichsinhalt bestimmt wird.\n\nDieses Verhalten ist besonders nützlich, wenn mehrere verwandte Pakete gleichzeitig entwickelt werden. Beispiel:\n\n* Eine Abhängigkeit wurde noch nicht veröffentlicht und ist nur lokal vorhanden.\n* Sie nehmen koordinierte Änderungen an mehreren Paketen vor und müssen sicherstellen, dass sie während des Testens aufeinander abgestimmt werden.\n\nAußerhalb eines Arbeitsbereichs werden Abhängigkeiten aus dem Paketcache aufgelöst und müssen mit den in `qlpack.yml`definierten Versionsbeschränkungen übereinstimmen. Innerhalb eines Arbeitsbereichs priorisiert die Auflösung stattdessen lokale Quellinhalte.\n\n## CodeQL Arbeitsbereiche und Abfrageauflösung\n\nDas Arbeitsbereichsabhängigkeitsmodell wirkt sich auf die Installation und Veröffentlichung von Paketen aus.\n\n* Während der Installation werden abhängigkeiten, die sich im Arbeitsbereich befinden, nicht in den Paketcache heruntergeladen und nicht in die `codeql-pack.lock.yml` Datei geschrieben.\n* Während der Veröffentlichung werden vom Arbeitsbereich bereitgestellte Abhängigkeiten mithilfe ihrer lokalen Quellinhalte anstelle von Versionen aus dem Paketcache gebündelt.\n\nWenn Sie beispielsweise `codeql pack install` in einem Packverzeichnis innerhalb eines Arbeitsbereichs ausführen, werden Abhängigkeiten verwendet, die im Arbeitsbereich gefunden werden, anstatt sie in den Paketzwischenspeicher herunterzuladen oder in der `codeql-pack.lock.yml` Datei aufzuzeichnen. Siehe [Erstellen und Arbeiten mit CodeQL-Paketen](/de/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/creating-and-working-with-codeql-packs#adding-and-installing-dependencies).\n\n### Example\n\nEin CodeQL Arbeitsbereich wird durch eine YAML-Datei mit dem Namen `codeql-workspace.yml`definiert. Betrachten Sie die folgende `codeql-workspace.yml` -Datei:\n\n```yaml\nprovide:\n  - \"**/qlpack.yml\"\n```\n\nUnd die folgende CodeQL Bibliothekspaketdatei `qlpack.yml` im Arbeitsbereich:\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.0.0\n```\n\nUnd die folgende CodeQL Abfragepaketdatei `qlpack.yml` im Arbeitsbereich:\n\n```yaml\nname: my-company/my-queries\nversion: 1.0.0\ndependencies:\n  my-company/my-library: \"*\"\n  codeql/cpp-all: ~0.2.0\n```\n\nBeachten Sie, dass der `dependencies`-Block für das CodeQL-Abfragepaket, `my-company/my-queries`, `\"*\"` als Version des Bibliothekspakets angibt. Da das Bibliothekspaket bereits als Quellabhängigkeit in `codeql-workspace.yml` definiert ist, wird der Inhalt des Bibliothekspakets immer innerhalb des Arbeitsbereichs aufgelöst. Alle von dir definierten Versionseinschränkungen werden in diesem Fall ignoriert. Die Verwendung von `\"*\"` für Quellabhängigkeiten macht deutlich, dass die Version vom Arbeitsbereich geerbt wird.\n\nWenn du `codeql pack install` über das Abfragepaketverzeichnis ausführst, wird eine entsprechende Version von `codeql/cpp-all` in den lokalen Paketcache heruntergeladen. Außerdem wird eine `codeql-pack.lock.yml`-Datei erstellt, die die aufgelöste Version von `codeql/cpp-all` enthält. Die Sperrdatei enthält keinen Eintrag für `my-company/my-library`, da sie über Quellabhängigkeiten aufgelöst wird. Die Datei `codeql-pack.lock.yml` sollte in etwa wie folgt aussehen:\n\n```yaml\ndependencies:\n  codeql/cpp-all:\n    version: 0.2.2\n```\n\nWenn Sie `codeql pack publish` im Verzeichnis des Abfragepakets ausführen, werden die `codeql/cpp-all`-Abhängigkeit aus dem Paketcache und die `my-company/my-library` aus dem Arbeitsbereich mit `my-company/my-queries` gebündelt und in der Container-Registry GitHub veröffentlicht.\n\n## Beispiel für eine `codeql-workspace.yml` Datei\n\nEin CodeQL Arbeitsbereich wird durch eine YAML-Datei mit dem Namen `codeql-workspace.yml`definiert. Diese Datei enthält einen `provide`-Block und optional `ignore`- und `registries`-Blöcke.\n\n* Der `provide`-Block enthält eine Liste von Glob-Mustern, die festlegen, welche CodeQL-Pakete im Arbeitsbereich verfügbar sind.\n\n* Der `ignore` Block enthält eine Liste von Glob-Mustern, die CodeQL Pakete definieren, die im Arbeitsbereich nicht verfügbar sind.\n\n* Der `registries` Block enthält eine Liste der GHES-URLs und Paketmuster, die steuern, welche Containerregistrierung für Veröffentlichungspakete CodeQL verwendet wird. Siehe [Veröffentlichen und Verwenden von CodeQL-Paketen](/de/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs#working-with-codeql-packs-on-ghes).\n\nJeder Eintrag im Abschnitt `provide` oder `ignore` muss dem Speicherort einer `qlpack.yml`-Datei zugeordnet werden. Alle Glob-Muster werden relativ zu dem Verzeichnis definiert, das die Arbeitsbereichsdatei enthält. Eine Liste der in dieser Datei akzeptierten Muster findest du unter [@actions/glob](https://github.com/actions/toolkit/tree/main/packages/glob#patterns).\n\nBeispielsweise definiert die folgende Datei `codeql-workspace.yml` einen Arbeitsbereich, der alle CodeQL-Pakete enthält, die rekursiv im Verzeichnis `codeql-packs` gefunden werden, mit Ausnahme der Pakete im Verzeichnis `experimental`. Der `registries` Block gibt an, dass `codeql/\\*` Pakete aus `https://ghcr.io/v2/`der GitHubStandardcontainerregistrierung heruntergeladen werden sollen. Alle anderen Pakete sollten von `GHE_HOSTNAME` heruntergeladen und in der dortigen Registrierung veröffentlicht werden.\n\n```yaml\nprovide:\n  - \"*/codeql-packs/**/qlpack.yml\"\nignore:\n  - \"*/codeql-packs/**/experimental/**/qlpack.yml\"\n\nregistries:\n - packages: 'codeql/*'\n   url: https://ghcr.io/v2/\n\n - packages: '*'\n   url: https://containers.GHE_HOSTNAME/v2/\n```\n\nIndem Sie `codeql pack ls` im Arbeitsverzeichnis des Arbeitsbereichs ausführen, können Sie die in einem Arbeitsbereich enthaltenen Pakete auflisten.\n\n## Verwendung von `${workspace}` als Versionsbereich in `qlpack.yml`-Dateien\n\nCodeQL Pakete innerhalb eines Arbeitsbereichs können die speziellen Versionsbereichsplatzhalter `${workspace}`, `~${workspace}` und `^${workspace}` verwenden. Diese Platzhalter geben an, dass dieses Paket von der Version des angegebenen Pakets abhängt, das sich derzeit im Arbeitsbereich befindet. Dieser Platzhalter wird in der Regel für Abhängigkeiten innerhalb von Bibliothekspaketen verwendet, um sicherzustellen, dass die Abhängigkeiten in ihrer `qlpack.yml`-Datei den Zustand des Arbeitsbereichs widerspiegeln, wenn sie veröffentlicht werden.\n\n### Example\n\nBetrachten Sie die folgenden beiden Bibliothekspakete im selben Arbeitsbereich:\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.2.3\ndependencies:\n  my-company/my-library2: ${workspace}\n```\n\n```yaml\nname: my-company/my-library2\nlibrary: true\nversion: 4.5.6\n```\n\nWenn `my-company/my-library` in der Containerregistrierung GitHub veröffentlicht wird, wird die Version der `my-company/my-library2`-Abhängigkeit in der veröffentlichten `qlpack.yml`-Datei als `4.5.6` eingetragen.\n\nWenn die Abhängigkeit `my-company/my-library2: ^${workspace}` im Quellpaket ist und das Paket veröffentlicht wird, wird die Version der `my-company/my-library2`-Abhängigkeit in der veröffentlichten `qlpack.yml`-Datei als `^4.5.6` geschrieben, was anzeigt, dass die Versionen `>= 4.5.6` und `< 5.0.0` alle mit diesem Bibliothekspaket kompatibel sind.\n\nWenn die Abhängigkeit `my-company/my-library2: ~${workspace}` im Quellpaket ist und das Paket veröffentlicht wird, wird die Version der `my-company/my-library2`-Abhängigkeit in der veröffentlichten `qlpack.yml`-Datei als `~4.5.6` geschrieben, was anzeigt, dass die Versionen `>= 4.5.6` und `< 4.6.0` alle mit diesem Bibliothekspaket kompatibel sind."}