Freigeben über


Sicheres Verwenden von Variablen und Parametern in Ihrer Pipeline

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

Erfahren Sie, wie Sie Variablen und Parameter sicher verwenden, um Eingaben von Pipelinebenutzern zu sammeln. Weitere Informationen finden Sie in den folgenden Artikeln:

Seien Sie vorsichtig mit geheimen Variablen. Die empfohlenen Methoden zum Festlegen geheimer Variablen umfassen die Verwendung der Benutzeroberfläche, das Erstellen einer Variablengruppe oder das Verwenden einer Variablengruppe, die aus Azure Key Vault stammt. Weitere Informationen finden Sie unter Festlegen von Geheimnisvariablen.

Variablen

Variablen dienen als bequeme Methode, um Benutzereingaben vorab zu sammeln und die Datenübertragung zwischen Pipelineschritten zu erleichtern. Seien Sie beim Arbeiten mit Variablen jedoch vorsichtig. Standardmäßig sind neu erstellte Variablen, unabhängig davon, ob sie in YAML oder in Skripts definiert sind, Lese-/Schreibzugriff. Nachgeschaltete Schritte können variablen Werte unerwartet ändern.

Betrachten Sie beispielsweise den folgenden Skriptausschnitt:

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

Wenn ein vorheriger Schritt festgelegt ist MyConfig Debug & deltree /y c:, kann es zu unbeabsichtigten Folgen führen. Dieses Beispiel löscht zwar lediglich den Inhalt Ihres Build-Agents, hebt jedoch die potenzielle Gefahr solcher Einstellungen hervor.

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 des folgenden spezifischen Schlüssels angeben:

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

Warteschlangenzeitvariablen

Beim Definieren einer Variablen im Pipelines-UI-Editor können Sie Benutzern erlauben, den Wert während der Pipelineausführung außer Kraft zu setzen. Diese Variablen werden als Warteschlangenzeitvariablen bezeichnet und werden immer im Pipelines-UI-Editor 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 den frühen Tagen von Azure-Pipelines hatte diese Funktionalität die folgenden Probleme:

  • Benutzer konnten neue Variablen definieren, die nicht bereits vom Pipelineautor 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 diese Variablen festgelegt werden, die explizit als "Settable at queue time" gekennzeichnet sind. Mit anderen Worten, Sie können variablen zur Warteschlangenzeit festlegen, es sei denn, diese Einstellung ist aktiviert.

Die Einstellung ist für die Arbeit auf Organisation und Projektebene konzipiert.

  • Organisationsebene:
    • Wenn die Einstellung aktiviert ist, erzwingt sie, dass nur Variablen, die explizit als "Settable at queue time" gekennzeichnet sind, für alle Pipelines in allen Projekten innerhalb der Organisation geändert werden können.
    • Project-Sammlungsadministratoren können diese Einstellung aktivieren oder deaktivieren.
    • Greifen Sie unter "Pipelineseinstellungen>" der Organisation>auf diese Einstellung zu. Screenshot: Einschränken von Variablen auf Organisationsebene, die zur Warteschlangenzeit festgelegt werden können
  • Projektebene:
    • Ähnlich wie auf Organisationsebene stellt die Aktivierung dieser Einstellung sicher, dass nur Variablen, die als "Settable at queue time" gekennzeichnet sind, für alle Pipelines innerhalb des jeweiligen Projekts geändert werden können.
    • Wenn die Einstellung auf Organisationsebene aktiviert ist, gilt sie für alle Projekte und kann nicht deaktiviert werden.
    • Project-Administratoren können diese Einstellung aktivieren oder deaktivieren.
    • Greifen Sie unter "Pipelineseinstellungen> von Project">auf diese Einstellung zu. Screenshot: Einschränken von Variablen, die auf Projektebene zur Warteschlangenzeit festgelegt werden können.

Das folgende Beispiel zeigt, dass die Einstellung aktiviert ist und Ihre Pipeline eine Variable my_variable definiert, die zur Warteschlangenzeit nicht festgelegt ist. 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.

Verwenden der Builds – Warteschlange und Ausführung – Ausführen von Rest-API-Aufrufen der Pipeline , um eine Pipelineausführung in die Warteschlange zu stellen und den Wert my_variable einer neuen Variablen festzulegen, tritt ein Fehler auf, der dem folgenden ähnlich ist.

{
  "$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 kann eine ausgeführte Pipeline keine Pipelineparameter ändern. Parameter weisen Datentypen auf, z number . B. und string, und sie können auf bestimmte Wertuntermengen beschränkt werden. Diese Einschränkung ist nützlich, wenn ein vom Benutzer konfigurierbarer Aspekt der Pipeline nur Werte aus einer vordefinierten Liste akzeptieren sollte, um sicherzustellen, dass die Pipeline keine beliebigen Daten akzeptiert.

Aktivierung der Parameterüberprüfung von Shellaufgabenargumenten

Pipelines können auf Aufgaben verweisen, die innerhalb der Pipeline ausgeführt werden. Einige Aufgaben enthalten einen arguments Parameter, mit dem Sie weitere Optionen für den Vorgang angeben können.

Wenn die Einstellung Enable shell tasks arguments parameter validationd aktiviert ist, wird der Argumentparameter überprüft, um sicherzustellen, dass die Shell Ordnungsgemäß Zeichen wie Semikolons, Anführungszeichen und Klammern ausführt. Ähnlich wie bei den Limit-Variablen, die zur Warteschlangenzeitoption festgelegt werden können, können Sie die Parameterüberprüfung von Argumenten für Shellaufgaben auf Organisationsebene oder Projektebene unter "Einstellungen>für Pipelineseinstellungen>" konfigurieren.

Wenn dieses Feature aktiviert ist, lösen alle Überprüfungsprobleme im Zusammenhang mit dem arguments Parameter eine Fehlermeldung wie die folgende aus:

Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Um dieses Problem zu beheben, passen Sie die Argumente an, indem Sie Sonderzeichen wie in der Fehlermeldung angegeben entfernen. Diese Überprüfung gilt für den arguments Parameter in den folgenden spezifischen Aufgaben:

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

Nächste Schritte