Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
W usłudze Azure Pipelines można zezwolić użytkownikom na dostosowywanie wykonywania potoku, zbierając dane wejściowe za pomocą zmiennych i parametrów. Jednak zaakceptowanie danych wejściowych użytkownika może również powodować zagrożenia bezpieczeństwa, jeśli nie są prawidłowo obsługiwane. Z tego artykułu dowiesz się, jak bezpiecznie używać zmiennych i parametrów w potoku.
Ten artykuł jest częścią serii, która ułatwia implementowanie środków zabezpieczeń dla usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Secure Azure Pipelines.
Wymagania wstępne
| Kategoria | Wymagania |
|---|---|
| Azure DevOps | — Zaimplementuj zalecenia w Zabezpieczanie Azure DevOps oraz Zabezpieczanie Azure Pipelines. — Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Utwórz swój pierwszy potok. |
| Uprawnienia | - Aby zmodyfikować uprawnienia potoków: Członek grupy Administratorzy Projektu. - Aby zmodyfikować uprawnienia organizacji: członek grupy Project Collection Administrators. |
Zmienne
Zmienne to wygodny sposób zbierania danych wejściowych użytkownika z wyprzedzeniem i ułatwiania transferu danych między krokami potoku. Jednak zmienne zdefiniowane w zadaniach YAML lub skryptach są domyślnie do odczytu i zapisu. Wartości skonfigurowane w krokach nadrzędnych mogą nieoczekiwanie modyfikować wartości podrzędne.
Na przykład poniższy fragment kodu skryptu wywołuje zmienną o nazwie MyConfig.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Jeśli poprzedni krok ustawi wartość zmiennej MyConfig na Debug & deltree /y c:, uruchomienie tego skryptu spowoduje usunięcie zawartości agenta kompilacji i może prowadzić do niezamierzonych konsekwencji. W tym przykładzie przedstawiono potencjalne zagrożenie dla takich ustawień.
Zmienne systemowe, takie jak Build.SourcesDirectory i zmienne wyjściowe zadań, są zawsze tylko do odczytu. Można również wyznaczyć zmienną utworzoną w skrycie lub zadaniu YAML jako tylko do odczytu, przekazując flagę isReadonly=true w poleceniu rejestrowania.
W definicji zmiennej YAML można określić zmienną tylko do odczytu przy użyciu określonego readonly klucza:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Należy zachować szczególną ostrożność ze zmiennymi tajnymi. 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 czasu kolejki
Podczas definiowania zmiennej w interfejsie użytkownika usługi Azure Pipelines możesz wybrać, czy użytkownicy będą mogli przesłonić wartość podczas wykonywania potoku. Zmienne, które umożliwiają użytkownikom ustawianie ich wartości w czasie kolejki, są nazywane zmiennymi czasu kolejki i mogą być zdefiniowane tylko w interfejsie użytkownika zmiennych usługi Azure Pipelines.
W edytorze klasycznego potoku zdefiniujesz zmienną czasu kolejki, zaznaczając pole wyboru Settable w czasie kolejki. W potokach YAML wyznaczysz je, wybierając pozycję Zezwalaj użytkownikom na zastąpienie tej wartości podczas uruchamiania tego potoku.
Uwaga / Notatka
W potoku wydania wybierz pozycję Ustawialne w czasie publikacji. Aby uzyskać więcej informacji, zobacz Jak edytować zmienne w czasie wdrożenia?
Gdy użytkownik ręcznie uruchamia potok, może wybrać zmienne czasu kolejki i zmienić wartości.
Użytkownicy muszą mieć uprawnienie do edytowania konfiguracji kompilacji kolejki w potoku, aby móc definiować zmienne ustawione w czasie kolejki.
Ogranicz zmienne, które można ustawić w czasie kolejki
Interfejs użytkownika usługi Azure Pipelines i interfejs API REST, który uruchamia potok, udostępniają użytkownikom sposoby dodawania nowych zmiennych w czasie kolejki. Dzięki temu użytkownicy mogą tworzyć zmienne, których autor potoku nie zdefiniował, zastąpić zmienne systemowe i ustawić wartości dla istniejących zmiennych w czasie kolejki.
Aby uniknąć problemów spowodowanych tymi możliwościami, można ograniczyć zmienne, które można ustawić w czasie kolejki. Można włączyć ustawienie Limit zmiennych, które można ustawić w czasie kolejki , aby użytkownicy mogli ustawiać tylko zmienne, które są jawnie oznaczone jako Settable w czasie kolejki lub Zezwalaj użytkownikom na zastąpienie tej wartości podczas uruchamiania tego potoku w kolejce.
To ustawienie można zastosować na poziomie organizacji i projektu.
Administratorzy kolekcji projektów mogą zastosować to ustawienie na poziomie organizacji w ustawieniach> organizacjiUstawienia>. Gdy ustawienie jest włączone, tylko zmienne, które są jawnie oznaczone jako Settable w czasie kolejki , można ustawić w kolejce dla wszystkich potoków we wszystkich projektach w organizacji.
Administratorzy projektu mogą zastosować to ustawienie na poziomie projektu w obszarze Ustawienia>potoków> projektu. Gdy ustawienie jest włączone, tylko zmienne, które są jawnie oznaczone jako Settable w czasie kolejki , można ustawić w czasie kolejki dla wszystkich potoków w tym projekcie. Jeśli ustawienie nie jest włączone na poziomie organizacji, można je włączyć lub wyłączyć dla poszczególnych projektów.
Jeśli ustawienie na poziomie organizacji jest włączone, ma zastosowanie do wszystkich projektów w organizacji i nie można go wyłączyć na poziomie projektu.
W poniższym przykładzie przedstawiono zmienne dla potoku klasycznego z niektórymi z nich oznaczonymi tabelą Settable w czasie kolejki. Zmienną BuildPlatform można ustawić w czasie kolejki, ale BuildConfiguration nie można jej ustawić.
Po uruchomieniu tego potoku na ekranie Zmienne są widoczne tylko zmienne oznaczone tabelą Settable w czasie kolejki.
Jeśli zmienne limitu, które można ustawić w czasie kolejki , są włączone na poziomie projektu lub organizacji, przycisk Dodaj zmienną nie jest wyświetlany.
Używanie kompilacji — kolejki lub przebiegów — uruchamianie interfejsów API potoku w celu kolejkowania przebiegu potoku i próby ustawienia wartości zmiennej, która nie została oznaczona jako Settable w czasie kolejki , kończy się niepowodzeniem z błędem podobnym do następującego:
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (BuildConfiguration). 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
Uruchomiony potok nie może modyfikować parametrów potoku, w przeciwieństwie do zmiennych. 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 argumentów zadań powłoki
Potoki danych mogą odwoływać się do zadań wykonywanych w ich obrębie. Niektóre zadania obejmują arguments parametr, który umożliwia użytkownikom określenie większej liczby opcji zadania.
Zastosowanie ustawienia walidacji Włącz argumenty zadań powłoki weryfikuje argument parametry dla wbudowanych zadań powłoki w celu sprawdzenia danych wejściowych, które mogą wprowadzać polecenia do skryptów. Sprawdzanie gwarantuje, że powłoka prawidłowo wykonuje znaki, takie jak średniki, cudzysłowy i nawiasy w następujących zadaniach potoku:
- PowerShell
- Skrypt wsadowy
- Bash
- Protokół SSH
- AzureFileCopy (Kopia pliku Azure)
- WindowsMachineFileCopy (Plik WindowsMachineFileCopy)
Można zastosować sprawdzanie poprawności argumentów Włącz zadania powłoki na poziomie organizacji w obszarzeUstawienia> ustawień >lub na poziomie projektu w obszarze >>. Jeśli ustawienie na poziomie organizacji jest włączone, ma zastosowanie do wszystkich projektów w organizacji i nie można go wyłączyć na poziomie projektu.
Po włączeniu tego ustawienia wszelkie problemy z walidacją związane z parametrem arguments wyzwala następujący komunikat o błędzie:
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 argument, uciekając przed znakami specjalnymi, jak wskazano w komunikacie o błędzie.