Sicheres Verwenden von Variablen und Parametern in Ihrer Pipeline

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

In diesem Artikel wird erläutert, wie Sie Variablen und Parameter sicher verwenden, um Beiträge von Pipelinebenutzern zu sammeln. Weitere Informationen zur Verwendung von Variablen und Parametern finden Sie unter:

Gehen Sie mit Geheimnisvariablen vorsichtig um. Es wird empfohlen, die Geheimnisvariablen über die Benutzeroberfläche, in einer Variablengruppe oder in einer Variablengruppe über Azure Key Vault festzulegen. Weitere Informationen finden Sie unter Festlegen von Geheimnisvariablen.

Variablen

Variablen können eine bequeme Möglichkeit sein, um im Voraus Informationen vom Benutzer zu sammeln. Sie können auch Variablen verwenden, um Daten innerhalb einer Pipeline von Schritt zu Schritt zu übergeben.

Verwenden Sie Variablen jedoch mit Bedacht. Neu erstellte Variablen, unabhängig davon, ob sie in YAML definiert oder von einem Skript geschrieben werden, sind standardmäßig auf Lese- und Schreibzugriff eingestellt. Ein nachgeschalteter Schritt kann den Wert einer Variable auf eine Art ung Weise ändern, die Sie nicht erwarten.

Lautet Ihr Skript lautet beispielsweise wie folgt:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Ein vorangehender Schritt könnte MyConfig auf Debug & deltree /y c: festlegen. Obwohl in diesem Beispiel nur der Inhalt Ihres Build-Agents gelöscht würde, können Sie sich vorstellen, wie diese Einstellung leicht viel gefährlicher werden könnte.

Sie können Variablen schreibgeschützt machen. Systemvariablen wie Build.SourcesDirectory, Aufgabenausgabevariablen und Warteschlangenzeitvariablen sind immer schreibgeschützt. Variablen, die in YAML oder zur Laufzeit von einem Skript erstellt werden, können als schreibgeschützt festgelegt werden. Wenn ein Skript oder eine Aufgabe eine neue Variable erstellt, kann dabei das isReadonly=true-Flag im Protokollierungsbefehl übergeben werden, um die Variable schreibgeschützt zu machen.

In YAML können Sie schreibgeschützte Variablen mithilfe eines bestimmten Schlüssels angeben:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Warteschlangenzeitvariablen

Wenn Sie eine Variable im Editor für die Pipelines-Benutzeroberfläche definieren, können Sie festlegen, dass Benutzer ihren Wert beim Ausführen der Pipeline überschreiben können. Wir nennen eine solche Variable eine Warteschlangenzeitvariable. Warteschlangenzeitvariablen werden immer im Editor der Pipelines-Benutzeroberfläche definiert.

Screenshot: Definieren einer Warteschlangenzeitvariable.

Warteschlangenzeitvariablen sind für Endbenutzer verfügbar, wenn eine Pipeline manuell ausgeführt wird. Sie können ihre Werte ändern. Screenshot: Aktualisieren des Werts einer Warteschlangenzeitvariable.

Benutzer benötigen die Berechtigung zum Bearbeiten der Warteschlangenbuildkonfiguration in der Pipeline, um Variablen anzugeben, die zur Warteschlangenzeit festgelegt werden.

Einschränken von Variablen, die zur Warteschlangenzeit festgelegt werden können

Benutzeroberfläche und REST-API, die zum Ausführen einer Pipeline verwendet wird, bieten Benutzern die Möglichkeit, neue Variablen zur Warteschlangenzeit zu definieren.

Screenshot: Hinzufügen einer Variable für die Warteschlangenzeit direkt vor dem Ausführen der Pipeline.

In der Anfangszeit von Azure Pipelines gab es bei dieser Funktion einige Probleme:

  • Benutzer konnten neue Variablen definieren, die nicht explizit vom Pipelineersteller in der Definition definiert wurden.
  • Benutzer*innen konnten Systemvariablen überschreiben.

Um diese Probleme zu beheben, haben wir eine Einstellung zum Einschränken von Variablen definiert, die zur Warteschlangenzeit festgelegt werden können. Wenn diese Einstellung aktiviert ist, können nur die Variablen festgelegt werden, die explizit als „Zur Warteschlangenzeit festlegbar“ gekennzeichnet sind. Anders ausgedrückt: Sie können alle Variablen zur Warteschlangenzeit festlegen, es sei denn, diese Einstellung ist aktiviert.

Die Einstellung funktioniert auf Organisations- und Projektebene.

  1. Organisationsebene. Wenn die Einstellung aktiviert ist, erzwingt sie, dass für alle Pipelines in allen Projekten der Organisation nur diejenigen Variablen festgelegt werden können, die explizit als „Zur Warteschlangenzeit festlegbar“ markiert sind. Wenn die Einstellung deaktiviert ist, kann jedes Projekt auswählen, ob Variablen, die zur Warteschlangenzeit festgelegt werden, eingeschränkt werden. Die Einstellung ist eine Umschaltfläche unter „Organisationseinstellungen -> Pipelines -> Einstellungen“. Nur Personen mit der Rolle „Projektsammlungsadministrator“ können sie aktivieren oder deaktivieren. Screenshot: Einschränken von Variablen auf Organisationsebene, die zur Warteschlangenzeit festgelegt werden können
  2. Projektebene. Wenn die Einstellung aktiviert ist, erzwingt sie, dass für alle Pipelines im Projekt nur diejenigen Variablen festgelegt werden können, die explizit als „Zur Warteschlangenzeit festlegbar“ markiert sind. Wenn die Einstellung auf Organisationsebene aktiviert ist, ist sie für alle Projekte aktiviert und kann nicht deaktiviert werden. Die Einstellung ist eine Umschaltfläche unter „Projekteinstellungen -> Pipelines -> Einstellungen“. Nur Personen mit der Rolle „Projektadministrator“ können sie aktivieren oder deaktivieren. Screenshot: Einschränken von Variablen, die auf Projektebene zur Warteschlangenzeit festgelegt werden können.

Betrachten wir dazu ein Beispiel. Angenommen, die Einstellung ist aktiviert und Ihre Pipeline definiert eine Variable namens my_variable, die zur Warteschlangenzeit nicht festgelegt werden kann. Screenshot: Definieren einer Variable in einer klassischen Pipeline.

Angenommen, Sie möchten die Pipeline ausführen. Im Bereich Variablen werden keine Variablen angezeigt und die Schaltfläche Variable hinzufügen fehlt.

Screenshot: Variablenbereich mit aktivierter Einstellung.

Wenn Sie die Rest-API-Aufrufe Builds – Warteschlange und Ausführungen – Pipeline ausführen verwenden, um eine Pipelineausführung zur Warteschlange hinzuzufügen und den Wert von my_variable oder einer neuen Variable auf festzulegen, tritt ein Fehler ähnlich dem folgenden auf.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parameter

Im Gegensatz zu Variablen können Pipelineparameter während der Ausführung nicht von einer Pipeline geändert werden. Parameter verfügen über Datentypen wie number und string, und sie können auf eine Teilmenge von Werten beschränkt werden. Das Einschränken der Parameter ist nützlich, wenn ein von Benutzer*innen konfigurierbarer Teil der Pipeline einen Wert nur aus einer eingeschränkten Liste annehmen soll. Durch die Einrichtung wird sichergestellt, dass die Pipeline keine beliebigen Daten annimmt.

Aktivierung der Parameterüberprüfung von Shellaufgabenargumenten

Pipelines können auf Aufgaben verweisen, die in der Pipeline ausgeführt werden. Mehrere in Azure DevOps enthaltene Aufgaben verfügen über einen Argumentparameter, mit dem Sie weitere Optionen für die Aufgabe angeben können.

Wenn die Einstellung „Aktivierung der Parameterüberprüfung von Shellaufgabenargumente" aktiviert ist, wird der Argumentparameter für alle Zeichen überprüft, die von der Shell möglicherweise nicht ordnungsgemäß ausgeführt werden. Beispielzeichen sind u. a. Semikolons, Anführungszeichen und Klammern.

Ähnlich wie die Option, die Limit-Variablen bei „Warteschlangenzeit“ festzulegen, kann die Aktivierung der Parameterüberprüfung von Shellaufgabenargumenten auf Organisationsebene auf Einstellungen>Pipelines>Einstelllungen oder auf Projektebene auf Einstellungen>Pipelines>Einstellungen konfiguriert werden.

Wenn diese Option aktiviert ist, wird ein Problem mit der Überprüfung erkannt, und es wird eine Fehlermeldung wie die folgende protokolliert: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Um das Problem zu beheben, passen Sie die Argumente an, indem Sie Sonderzeichen wie in der Fehlermeldung angegeben entfernen.

Wenn die Aktivierung der Parameterüberprüfung von Shellaufgabenargumente aktiviert ist, wird die Überprüfung auf den Argumentparameter in den folgenden Aufgaben angewendet.

  • PowerShell
  • BatchScript
  • Bash
  • SSH
  • AzureFileCopy
  • WindowsMachineFileCopy

Nächste Schritte

Nachdem Sie Ihre Eingaben gesichert haben, müssen Sie auch Ihre freigegebene Infrastruktur schützen.