Bezpieczne używanie zmiennych i parametrów w potoku
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Dowiedz się, jak bezpiecznie korzystać ze zmiennych i parametrów w celu zbierania danych wejściowych od użytkowników potoku. Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Definiowanie zmiennych
- Ustawianie zmiennych tajnych
- Używanie wstępnie zdefiniowanych zmiennych
- Używanie parametrów środowiska uruchomieniowego
- Używanie typów szablonów
Zachowaj ostrożność przy użyciu zmiennych tajnych. Zalecane metody ustawiania zmiennych tajnych obejmują używanie interfejsu użytkownika, tworzenie grupy zmiennych lub używanie grupy zmiennych pochodzącej z usługi Azure Key Vault. Aby uzyskać więcej informacji, zobacz ustawianie zmiennych tajnych.
Zmienne
Zmienne służą jako wygodna metoda zbierania danych wejściowych użytkownika z góry i ułatwiania transferu danych między krokami potoku. Należy jednak zachować ostrożność podczas pracy ze zmiennymi. Domyślnie nowo utworzone zmienne, zdefiniowane w języku YAML lub skryptowym, są odczytem i zapisem. Kroki podrzędne mogą nieoczekiwanie modyfikować wartości zmiennych.
Rozważmy na przykład następujący fragment kodu skryptu:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Jeśli poprzedni krok zostanie ustawiona MyConfig
na Debug & deltree /y c:
, może to prowadzić do niezamierzonych konsekwencji. Ten przykład jedynie usuwa zawartość agenta kompilacji, ale podkreśla potencjalne niebezpieczeństwo wystąpienia takich ustawień.
Zmienne można tworzyć tylko do odczytu.
Zmienne systemowe, takie jak Build.SourcesDirectory
, zmienne wyjściowe zadania i zmienne czasu kolejki są zawsze tylko do odczytu.
Zmienne tworzone w języku YAML lub tworzone w czasie wykonywania przez skrypt można wyznaczyć jako tylko do odczytu.
Gdy skrypt lub zadanie tworzy nową zmienną, może przekazać isReadonly=true
flagę w poleceniu rejestrowania, aby zmienna była tylko do odczytu.
W języku YAML można określić zmienne tylko do odczytu przy użyciu następującego klucza:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Zmienne czasu kolejki
Podczas definiowania zmiennej w edytorze interfejsu użytkownika potoków można zezwolić użytkownikom na zastępowanie jej wartości podczas wykonywania potoku. Te zmienne są określane jako zmienne czasu kolejki i są zawsze definiowane w edytorze interfejsu użytkownika potoków.
Zmienne czasu kolejki są widoczne dla użytkownika końcowego podczas ręcznego uruchamiania potoku i mogą zmieniać swoje wartości.
Użytkownicy potrzebują uprawnienia do edytowania konfiguracji kompilacji kolejki w potoku, aby określić zmienne ustawione w czasie kolejki.
Ogranicz zmienne, które można ustawić w czasie kolejki
Interfejs użytkownika i interfejs API REST używany do uruchamiania potoku zapewniają użytkownikom możliwość definiowania nowych zmiennych w czasie kolejki.
We wczesnych dniach usługi Azure Pipelines ta funkcja miała następujące problemy:
- Umożliwiło to użytkownikom definiowanie nowych zmiennych, które nie zostały jeszcze zdefiniowane przez autora potoku w definicji.
- Umożliwiło to użytkownikom zastępowanie zmiennych systemowych.
Aby rozwiązać te problemy, zdefiniowaliśmy ustawienie ograniczające zmienne, które można ustawić w czasie kolejki. Po włączeniu tego ustawienia można ustawić tylko te zmienne jawnie oznaczone jako "Settable at queue time". Innymi słowy, można ustawić dowolne zmienne w czasie kolejki, chyba że to ustawienie jest włączone.
To ustawienie jest przeznaczone do pracy na poziomie organizacji i projektu.
- Poziom organizacji:
- Gdy ustawienie jest włączone, wymusza, że tylko zmienne jawnie oznaczone jako "Settable at queue time" można modyfikować dla wszystkich potoków we wszystkich projektach w organizacji.
- Administratorzy kolekcji projektów mogą włączać lub wyłączać to ustawienie.
- Uzyskaj dostęp do tego ustawienia w obszarze Ustawienia>organizacji Ustawienia potoków.>
- Poziom projektu:
- Podobnie jak na poziomie organizacji, włączenie tego ustawienia gwarantuje, że dla wszystkich potoków w określonym projekcie można modyfikować tylko zmienne oznaczone jako "Settable at queue time".
- Jeśli ustawienie na poziomie organizacji jest włączone, dotyczy wszystkich projektów i nie można go wyłączyć.
- Administratorzy projektu mogą włączać lub wyłączać to ustawienie.
- Uzyskaj dostęp do tego ustawienia w obszarze Ustawienia>projektu Ustawienia potoków.>
W poniższym przykładzie pokazano, że ustawienie jest włączone, a potok definiuje zmienną o nazwie my_variable
, która nie jest ustawiana w czasie kolejki.
Następnie załóżmy, że chcesz uruchomić potok. Na panelu Zmienne nie są wyświetlane żadne zmienne, a brak przycisku Dodaj zmienną .
Używanie wywołań interfejsu API REST kompilacji — kolejki i przebiegów — uruchamianie potoku w celu kolejkowania przebiegu potoku i ustawiania wartości my_variable
lub nowej zmiennej kończy się niepowodzeniem z powodu błędu podobnego do poniższego.
{
"$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
}
Parametry
W przeciwieństwie do zmiennych, uruchomiony potok nie może modyfikować parametrów potoku.
Parametry mają typy danych, takie jak number
i string
, i mogą być ograniczone do określonych podzestawów wartości. To ograniczenie jest przydatne, gdy konfigurowalny przez użytkownika aspekt potoku powinien akceptować tylko wartości ze wstępnie zdefiniowanej listy, zapewniając, że potok nie akceptuje dowolnych danych.
Włączanie walidacji parametrów argumentów zadań powłoki
Potoki mogą odwoływać się do zadań wykonywanych w potoku. Niektóre zadania obejmują arguments
parametr, który umożliwia określenie większej liczby opcji zadania.
Po włączeniu sprawdzania poprawności parametru Włącz argumenty zadań powłoki parametr argumenty przechodzi przegląd, aby upewnić się, że powłoka prawidłowo wykonuje znaki, takie jak średniki, cudzysłowy i nawiasy. Podobnie jak w przypadku opcji Ogranicz zmienne, które można ustawić w czasie kolejki, można skonfigurować opcję Włącz walidację parametrów zadań powłoki na poziomie organizacji lub projektu w obszarze Ustawienia>Potoki.>
Po włączeniu tej funkcji wszelkie problemy z walidacją związane z parametrem arguments
wyzwalają komunikat o błędzie podobny do następującego:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Aby rozwiązać ten problem, dostosuj argumenty, uciekając przed znakami specjalnymi, jak wskazano w komunikacie o błędzie. Ta walidacja dotyczy parametru arguments
w następujących określonych zadaniach:
- PowerShell
- BatchScript
- Bash
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy
Następne kroki
Zabezpieczanie udostępnionej infrastruktury