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:
- Definieren von Variablen
- Festlegen geheimer Variablen
- Verwenden vordefinierter Variablen
- Verwenden von Laufzeitparametern
- Verwenden von Vorlagentypen
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.
Warteschlangenzeitvariablen sind für Endbenutzer verfügbar, wenn eine Pipeline manuell ausgeführt wird. Sie können ihre Werte ändern.
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.
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.
- 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.
Das folgende Beispiel zeigt, dass die Einstellung aktiviert ist und Ihre Pipeline eine Variable my_variable
definiert, die zur Warteschlangenzeit nicht festgelegt ist.
Angenommen, Sie möchten die Pipeline ausführen. Im Bereich Variablen werden keine Variablen angezeigt und die Schaltfläche Variable hinzufügen fehlt.
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
Sichern Ihrer freigegebenen Infrastruktur