Określanie zadań w potoku
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Potok można organizować w zadania. Każdy potok ma co najmniej jedno zadanie. Zadanie to seria kroków, które są uruchamiane sekwencyjnie jako jednostka. Innymi słowy, zadanie jest najmniejszą jednostką pracy, którą można zaplanować do uruchomienia.
Aby dowiedzieć się więcej na temat kluczowych pojęć i składników tworzących potok, zobacz Kluczowe pojęcia dotyczące nowych użytkowników usługi Azure Pipelines.
Usługa Azure Pipelines nie obsługuje priorytetu zadania dla potoków YAML. Aby kontrolować czas uruchamiania zadań, można określić warunki i zależności.
Definiowanie pojedynczego zadania
W najprostszym przypadku potok ma jedno zadanie. W takim przypadku nie musisz jawnie używać słowa kluczowegojob
, chyba że używasz szablonu. Możesz bezpośrednio określić kroki w pliku YAML.
Ten plik YAML zawiera zadanie uruchamiane w agencie Hello world
hostowanym przez firmę Microsoft i zwraca dane wyjściowe .
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"
Możesz określić więcej właściwości tego zadania. W takim przypadku możesz użyć słowa kluczowego job
.
jobs:
- job: myJob
timeoutInMinutes: 10
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"
Potok może mieć wiele zadań. W takim przypadku użyj słowa kluczowego jobs
.
jobs:
- job: A
steps:
- bash: echo "A"
- job: B
steps:
- bash: echo "B"
Potok może zawierać wiele etapów, z których każdy ma wiele zadań. W takim przypadku użyj słowa kluczowego stages
.
stages:
- stage: A
jobs:
- job: A1
- job: A2
- stage: B
jobs:
- job: B1
- job: B2
Pełna składnia określająca zadanie to:
- job: string # name of the job, A-Z, a-z, 0-9, and underscore
displayName: string # friendly name to display in the UI
dependsOn: string | [ string ]
condition: string
strategy:
parallel: # parallel strategy
matrix: # matrix strategy
maxParallel: number # maximum number simultaneous matrix legs to run
# note: `parallel` and `matrix` are mutually exclusive
# you may specify one or the other; including both is an error
# `maxParallel` is only valid with `matrix`
continueOnError: boolean # 'true' if future jobs should run even if this job fails; defaults to 'false'
pool: pool # agent pool
workspace:
clean: outputs | resources | all # what to clean up before the job runs
container: containerReference # container to run this job inside
timeoutInMinutes: number # how long to run the job before automatically cancelling
cancelTimeoutInMinutes: number # how much time to give 'run always even if cancelled tasks' before killing them
variables: { string: string } | [ variable | variableReference ]
steps: [ script | bash | pwsh | powershell | checkout | task | templateReference ]
services: { string: string | container } # container resources to run as a service container
Pełna składnia określająca zadanie to:
- job: string # name of the job, A-Z, a-z, 0-9, and underscore
displayName: string # friendly name to display in the UI
dependsOn: string | [ string ]
condition: string
strategy:
parallel: # parallel strategy
matrix: # matrix strategy
maxParallel: number # maximum number simultaneous matrix legs to run
# note: `parallel` and `matrix` are mutually exclusive
# you may specify one or the other; including both is an error
# `maxParallel` is only valid with `matrix`
continueOnError: boolean # 'true' if future jobs should run even if this job fails; defaults to 'false'
pool: pool # agent pool
workspace:
clean: outputs | resources | all # what to clean up before the job runs
container: containerReference # container to run this job inside
timeoutInMinutes: number # how long to run the job before automatically cancelling
cancelTimeoutInMinutes: number # how much time to give 'run always even if cancelled tasks' before killing them
variables: { string: string } | [ variable | variableReference ]
steps: [ script | bash | pwsh | powershell | checkout | task | templateReference ]
services: { string: string | container } # container resources to run as a service container
uses: # Any resources (repos or pools) required by this job that are not already referenced
repositories: [ string ] # Repository references to Azure Git repositories
pools: [ string ] # Pool names, typically when using a matrix strategy for the job
Jeśli głównym celem zadania jest wdrożenie aplikacji (w przeciwieństwie do kompilowania lub testowania aplikacji), możesz użyć specjalnego typu zadania o nazwie zadanie wdrożenia.
Składnia zadania wdrożenia to:
- deployment: string # instead of job keyword, use deployment keyword
pool:
name: string
demands: string | [ string ]
environment: string
strategy:
runOnce:
deploy:
steps:
- script: echo Hi!
Mimo że można dodać kroki dla zadań wdrażania w elemecie job
, zalecamy użycie zadania wdrożenia. Zadanie wdrożenia ma kilka korzyści. Można na przykład wdrożyć w środowisku, które obejmuje korzyści, takie jak możliwość wyświetlenia historii wdrożonych elementów.
Typy zadań
Zadania mogą być różnego typu, w zależności od tego, gdzie są uruchamiane.
- Zadania puli agentów są uruchamiane na agencie w puli agentów.
- Zadania serwera są uruchamiane na serwerze Azure DevOps Server.
- Zadania kontenera są uruchamiane w kontenerze na agencie w puli agentów. Aby uzyskać więcej informacji na temat wybierania kontenerów, zobacz Definiowanie zadań kontenera.
Zadania puli agentów
Są to najczęściej używane zadania i są uruchamiane na agencie w puli agentów.
- W przypadku korzystania z agentów hostowanych przez firmę Microsoft każde zadanie w potoku pobiera nowego agenta.
- Użyj żądań z własnymi agentami, aby określić, jakie możliwości musi mieć agent do uruchomienia zadania. Możesz uzyskać tego samego agenta dla kolejnych zadań, w zależności od tego, czy w puli agentów istnieje więcej niż jeden agent, który odpowiada wymaganiom potoku. Jeśli w puli jest tylko jeden agent, który odpowiada wymaganiom potoku, potok będzie czekać, aż ten agent będzie dostępny.
Uwaga
Wymagania i możliwości są przeznaczone do użytku z własnymi agentami, dzięki czemu zadania mogą być dopasowane do agenta spełniającego wymagania zadania. W przypadku korzystania z agentów hostowanych przez firmę Microsoft wybierasz obraz agenta, który spełnia wymagania zadania, więc chociaż istnieje możliwość dodania możliwości do agenta hostowanego przez firmę Microsoft, nie musisz używać funkcji z agentami hostowanymi przez firmę Microsoft.
pool:
name: myPrivateAgents # your job runs on an agent in this pool
demands: agent.os -equals Windows_NT # the agent must have this capability to run the job
steps:
- script: echo hello world
Lub wiele wymagań:
pool:
name: myPrivateAgents
demands:
- agent.os -equals Darwin
- anotherCapability -equals somethingElse
steps:
- script: echo hello world
Dowiedz się więcej o możliwościach agenta.
Zadania serwera
Zadania w zadaniu serwera są orkiestrowane i wykonywane na serwerze (Azure Pipelines lub TFS). Zadanie serwera nie wymaga agenta ani żadnych komputerów docelowych. Obecnie w zadaniu serwera jest obsługiwanych tylko kilka zadań. Maksymalny czas zadania serwera wynosi 30 dni.
Zadania bez agenta obsługiwane
Obecnie w przypadku zadań bez agenta obsługiwane są tylko następujące zadania:
- Opóźnij zadanie
- Wywoływanie zadania funkcji platformy Azure
- Wywoływanie zadania interfejsu API REST
- Zadanie ręcznej weryfikacji
- Publikowanie w usłudze Azure Service Bus — zadanie
- Wykonywanie zapytań względem zadania Alerty usługi Azure Monitor
- Zadanie Wykonywanie zapytań o elementy robocze
Ponieważ zadania są rozszerzalne, można dodać więcej zadań bez agentów przy użyciu rozszerzeń. Domyślny limit czasu dla zadań bez agenta wynosi 60 minut.
Pełna składnia określająca zadanie serwera to:
jobs:
- job: string
timeoutInMinutes: number
cancelTimeoutInMinutes: number
strategy:
maxParallel: number
matrix: { string: { string: string } }
pool: server # note: the value 'server' is a reserved keyword which indicates this is an agentless job
Można również użyć uproszczonej składni:
jobs:
- job: string
pool: server # note: the value 'server' is a reserved keyword which indicates this is an agentless job
Zależności
Podczas definiowania wielu zadań na jednym etapie można określić zależności między nimi. Potoki muszą zawierać co najmniej jedno zadanie bez zależności. Domyślnie zadania potoku YAML usługi Azure DevOps są uruchamiane równolegle, chyba że wartość jest ustawiona dependsOn
.
Uwaga
Każdy agent może uruchamiać tylko jedno zadanie naraz. Aby uruchomić wiele zadań równolegle, należy skonfigurować wielu agentów. Potrzebne są również wystarczające zadania równoległe.
Składnia definiowania wielu zadań i ich zależności jest następująca:
jobs:
- job: string
dependsOn: string
condition: string
Przykładowe zadania kompilujące sekwencyjnie:
jobs:
- job: Debug
steps:
- script: echo hello from the Debug build
- job: Release
dependsOn: Debug
steps:
- script: echo hello from the Release build
Przykładowe zadania, które są kompilujące równolegle (bez zależności):
jobs:
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- script: echo hello from Windows
- job: macOS
pool:
vmImage: 'macOS-latest'
steps:
- script: echo hello from macOS
- job: Linux
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo hello from Linux
Przykład wentylatora:
jobs:
- job: InitialJob
steps:
- script: echo hello from initial job
- job: SubsequentA
dependsOn: InitialJob
steps:
- script: echo hello from subsequent A
- job: SubsequentB
dependsOn: InitialJob
steps:
- script: echo hello from subsequent B
Przykład wentylatora:
jobs:
- job: InitialA
steps:
- script: echo hello from initial A
- job: InitialB
steps:
- script: echo hello from initial B
- job: Subsequent
dependsOn:
- InitialA
- InitialB
steps:
- script: echo hello from subsequent
Warunki
Możesz określić warunki, w których każde zadanie jest uruchamiane. Domyślnie zadanie jest uruchamiane, jeśli nie zależy od żadnego innego zadania lub czy wszystkie zadania, od których zależy, zostały ukończone i zakończyły się pomyślnie. To zachowanie można dostosować, wymuszając uruchomienie zadania, nawet jeśli poprzednie zadanie zakończy się niepowodzeniem lub przez określenie warunku niestandardowego.
Przykład uruchamiania zadania na podstawie stanu uruchamiania poprzedniego zadania:
jobs:
- job: A
steps:
- script: exit 1
- job: B
dependsOn: A
condition: failed()
steps:
- script: echo this will run when A fails
- job: C
dependsOn:
- A
- B
condition: succeeded('B')
steps:
- script: echo this will run when B runs and succeeds
Przykład użycia warunku niestandardowego:
jobs:
- job: A
steps:
- script: echo hello
- job: B
dependsOn: A
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
steps:
- script: echo this only runs for master
Można określić, że zadanie jest uruchamiane na podstawie wartości zmiennej wyjściowej ustawionej w poprzednim zadaniu. W takim przypadku można używać zmiennych ustawionych tylko w zadaniach zależnych bezpośrednio:
jobs:
- job: A
steps:
- script: "echo '##vso[task.setvariable variable=skipsubsequent;isOutput=true]false'"
name: printvar
- job: B
condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
dependsOn: A
steps:
- script: echo hello from B
Limity czasu
Aby uniknąć zajmowania zasobów, gdy zadanie nie odpowiada lub oczekiwanie trwa zbyt długo, zalecamy ustawienie limitu czasu, w jakim zadanie może być wykonywane. Użyj ustawienia limitu czasu zadania, aby określić w minutach limit czasu, w jakim może być wykonywane zadanie. Ustawienie wartości na zero oznacza, że zadanie może zostać uruchomione:
- Na zawsze na własnych agentach
- Przez 360 minut (6 godzin) na agentach hostowanych przez firmę Microsoft z publicznym projektem i repozytorium publicznym
- Przez 60 minut w przypadku agentów hostowanych przez firmę Microsoft z prywatnym projektem lub repozytorium prywatnym (chyba że zostanie opłacona dodatkowa pojemność )
Okres limitu czasu rozpoczyna się po uruchomieniu zadania. Nie uwzględnia czasu kolejki zadania ani oczekiwania na agenta.
Parametr timeoutInMinutes
umożliwia ustawienie limitu czasu wykonywania zadania. Jeśli nie zostanie określony, wartość domyślna to 60 minut. Jeśli 0
zostanie określony, zostanie użyty maksymalny limit (opisany powyżej).
Ustawienie cancelTimeoutInMinutes
umożliwia ustawienie limitu czasu anulowania zadania, gdy zadanie wdrożenia ma być uruchomione, jeśli poprzednie zadanie nie powiodło się. Jeśli nie zostanie określony, wartość domyślna to 5 minut. Wartość powinna być w zakresie od 1 do 35790 minut.
jobs:
- job: Test
timeoutInMinutes: 10 # how long to run the job before automatically cancelling
cancelTimeoutInMinutes: 2 # how much time to give 'run always even if cancelled tasks' before stopping them
Limity czasu mają następujący poziom pierwszeństwa.
- W przypadku agentów hostowanych przez firmę Microsoft zadania są ograniczone do czasu ich działania na podstawie typu projektu i tego, czy są uruchamiane przy użyciu płatnego zadania równoległego. Gdy upłynie interwał limitu czasu zadania hostowanego przez firmę Microsoft, zadanie zostanie zakończone. W przypadku agentów hostowanych przez firmę Microsoft zadania nie mogą być uruchamiane dłużej niż w tym interwale, niezależnie od limitu czasu na poziomie zadania określonego w zadaniu.
- Limit czasu skonfigurowany na poziomie zadania określa maksymalny czas trwania zadania do uruchomienia. Gdy upłynie interwał limitu czasu na poziomie zadania, zadanie zostanie zakończone. Jeśli zadanie jest uruchamiane w agencie hostowanym przez firmę Microsoft, ustawienie limitu czasu poziomu zadania na interwał większy niż wbudowany limit czasu na poziomie zadania hostowanego przez firmę Microsoft nie ma żadnego wpływu i jest używany limit czasu zadania hostowanego przez firmę Microsoft.
- Możesz również ustawić limit czasu dla każdego zadania indywidualnie — zobacz opcje sterowania zadaniami. Jeśli interwał limitu czasu na poziomie zadania upłynie przed ukończeniem zadania, zadanie uruchomione zostanie zakończone, nawet jeśli zadanie jest skonfigurowane z dłuższym interwałem limitu czasu.
Konfiguracja wielu zadań
Z jednego zadania, które tworzysz, można uruchamiać wiele zadań na wielu agentach równolegle. Przykłady obejmują:
Kompilacje z wieloma konfiguracjami: można równolegle tworzyć wiele konfiguracji. Można na przykład utworzyć aplikację Visual C++ dla obu
debug
release
i konfiguracji na obux86
platformach ix64
. Aby uzyskać więcej informacji, zobacz Visual Studio Build — wiele konfiguracji dla wielu platform.Wdrożenia z wieloma konfiguracjami: można uruchomić wiele wdrożeń równolegle, na przykład do różnych regionów geograficznych.
Testowanie wielu konfiguracji: można uruchomić równoległe testowanie wielu konfiguracji.
Wiele konfiguracji zawsze generuje co najmniej jedno zadanie, nawet jeśli zmienna z wieloma konfiguracjami jest pusta.
Strategia matrix
umożliwia wielokrotne wysyłanie zadania z różnymi zestawami zmiennych. Tag maxParallel
ogranicza ilość równoległości. Następujące zadanie jest wysyłane trzy razy z wartościami Location i Browser ustawionymi zgodnie z określonymi. Jednak tylko dwa zadania są uruchamiane w tym samym czasie.
jobs:
- job: Test
strategy:
maxParallel: 2
matrix:
US_IE:
Location: US
Browser: IE
US_Chrome:
Location: US
Browser: Chrome
Europe_Chrome:
Location: Europe
Browser: Chrome
Uwaga
Nazwy konfiguracji macierzy (na przykład US_IE
powyżej) muszą zawierać tylko podstawowe litery alfabetu łacińskiego (A-Z, a-z), cyfry i podkreślenia (_
).
Muszą zaczynać się od litery.
Ponadto muszą mieć co najmniej 100 znaków.
Można również użyć zmiennych wyjściowych do wygenerowania macierzy. Może to być przydatne, jeśli musisz wygenerować macierz przy użyciu skryptu.
matrix
akceptuje wyrażenie środowiska uruchomieniowego zawierające ciągyfikowany obiekt JSON.
Ten obiekt JSON po rozwinięciu musi być zgodny ze składnią macierzy.
W poniższym przykładzie kodowaliśmy ciąg JSON, ale można go wygenerować za pomocą języka skryptowego lub programu wiersza polecenia.
jobs:
- job: generator
steps:
- bash: echo "##vso[task.setVariable variable=legs;isOutput=true]{'a':{'myvar':'A'}, 'b':{'myvar':'B'}}"
name: mtrx
# This expands to the matrix
# a:
# myvar: A
# b:
# myvar: B
- job: runner
dependsOn: generator
strategy:
matrix: $[ dependencies.generator.outputs['mtrx.legs'] ]
steps:
- script: echo $(myvar) # echos A or B depending on which leg is running
Krojenie
Zadanie agenta może służyć do równoległego uruchamiania zestawu testów. Na przykład można uruchomić duży pakiet 1000 testów na jednym agencie. Możesz też użyć dwóch agentów i uruchomić 500 testów na każdym z nich równolegle.
Aby zastosować fragmentowanie, zadania w zadaniu powinny być wystarczająco inteligentne, aby zrozumieć fragment, do którego należą.
Zadanie testowe programu Visual Studio to jedno z takich zadań, które obsługuje fragmentowanie testowe. Jeśli zainstalowano wielu agentów, możesz określić, w jaki sposób zadanie testowe programu Visual Studio jest uruchamiane równolegle na tych agentach.
Strategia parallel
umożliwia wielokrotne duplikowanie zadania.
Zmienne System.JobPositionInPhase
i System.TotalJobsInPhase
są dodawane do każdego zadania. Zmienne mogą być następnie używane w skryptach do dzielenia pracy między zadaniami.
Zobacz Równoległe i wiele wykonań przy użyciu zadań agenta.
Następujące zadanie jest wysyłane pięć razy z wartościami System.JobPositionInPhase
i System.TotalJobsInPhase
ustawionymi odpowiednio.
jobs:
- job: Test
strategy:
parallel: 5
Zmienne zadania
Jeśli używasz języka YAML, zmienne można określić w zadaniu. Zmienne mogą być przekazywane do danych wejściowych zadań przy użyciu składni makr $(variableName) lub dostępnej w skrypecie przy użyciu zmiennej etapowej.
Oto przykład definiowania zmiennych w zadaniu i używania ich w ramach zadań podrzędnych.
variables:
mySimpleVar: simple var value
"my.dotted.var": dotted var value
"my var with spaces": var with spaces value
steps:
- script: echo Input macro = $(mySimpleVar). Env var = %MYSIMPLEVAR%
condition: eq(variables['agent.os'], 'Windows_NT')
- script: echo Input macro = $(mySimpleVar). Env var = $MYSIMPLEVAR
condition: in(variables['agent.os'], 'Darwin', 'Linux')
- bash: echo Input macro = $(my.dotted.var). Env var = $MY_DOTTED_VAR
- powershell: Write-Host "Input macro = $(my var with spaces). Env var = $env:MY_VAR_WITH_SPACES"
Aby uzyskać informacje na temat używania warunku, zobacz Określanie warunków.
Obszar roboczy
Po uruchomieniu zadania puli agentów program tworzy obszar roboczy na agencie. Obszar roboczy to katalog, w którym pobiera źródło, uruchamia kroki i generuje dane wyjściowe. Do katalogu obszaru roboczego można odwoływać się w zadaniu przy użyciu Pipeline.Workspace
zmiennej . W tym celu tworzone są różne podkatalogi:
Build.SourcesDirectory
to miejsce, w którym zadania pobierają kod źródłowy aplikacji.Build.ArtifactStagingDirectory
to miejsce, w którym zadania pobierają artefakty potrzebne do potoku lub przekazywania artefaktów przed ich opublikowaniem.Build.BinariesDirectory
to miejsce, w którym zadania zapisują swoje dane wyjściowe.Common.TestResultsDirectory
to miejsce, w którym zadania przekazują wyniki testów.
Element $(Build.ArtifactStagingDirectory)
i $(Common.TestResultsDirectory)
są zawsze usuwane i tworzone ponownie przed każdą kompilacją.
Po uruchomieniu potoku na własnym agencie domyślnie żaden z podkatalogów innych niż $(Build.ArtifactStagingDirectory)
i $(Common.TestResultsDirectory)
nie jest czyszczony między dwoma kolejnymi przebiegami. W związku z tym można wykonywać przyrostowe kompilacje i wdrożenia, pod warunkiem, że zadania są implementowane w celu ich użycia. To zachowanie można zastąpić przy użyciu workspace
ustawienia w zadaniu.
Ważne
Opcje czyszczenia obszaru roboczego mają zastosowanie tylko dla własnych agentów. Zadania są zawsze uruchamiane na nowym agencie z agentami hostowanymi przez firmę Microsoft.
- job: myJob
workspace:
clean: outputs | resources | all # what to clean up before the job runs
Po określeniu clean
jednej z opcji są one interpretowane w następujący sposób:
outputs
: UsuńBuild.BinariesDirectory
przed uruchomieniem nowego zadania.resources
: UsuńBuild.SourcesDirectory
przed uruchomieniem nowego zadania.all
: Usuń całyPipeline.Workspace
katalog przed uruchomieniem nowego zadania.
jobs:
- deployment: MyDeploy
pool:
vmImage: 'ubuntu-latest'
workspace:
clean: all
environment: staging
Uwaga
W zależności od możliwości agenta i wymagań potoku każde zadanie może być kierowane do innego agenta w puli hostowanej samodzielnie. W związku z tym można uzyskać nowego agenta dla kolejnych przebiegów potoku (lub etapów lub zadań w tym samym potoku), więc nie jest to gwarancja, że kolejne uruchomienia, zadania lub etapy będą mogły uzyskać dostęp do danych wyjściowych z poprzednich przebiegów, zadań lub etapów. Można skonfigurować możliwości agenta i wymagania potoku, aby określić, którzy agenci są przyzwyczajeni do uruchamiania zadania potoku, ale chyba że istnieje tylko jeden agent w puli, który spełnia wymagania, nie ma gwarancji, że kolejne zadania będą używać tego samego agenta co poprzednie zadania. Aby uzyskać więcej informacji, zobacz Określanie wymagań.
Oprócz czyszczenia obszaru roboczego można również skonfigurować czyszczenie, konfigurując ustawienie Czyszczenie w interfejsie użytkownika ustawień potoku. Jeśli ustawienie Clean (Czyszczenie) ma wartość true( jest również jego wartością domyślną), jest równoważne określeniu dla każdego kroku wyewidencjonowania clean: true
w potoku. Po określeniu clean: true
polecenia uruchomisz git clean -ffdx
polecenie , a następnie git reset --hard HEAD
przed pobraniem usługi Git. Aby skonfigurować ustawienie Czyszczenie :
Edytuj potok, wybierz pozycję ..., a następnie wybierz pozycję Wyzwalacze.
Wybierz pozycję YAML, Pobierz źródła i skonfiguruj odpowiednie ustawienie Wyczyść . Wartość domyślna to true.
Pobieranie artefaktu
Ten przykładowy plik YAML publikuje artefakt WebSite
, a następnie pobiera artefakt do $(Pipeline.Workspace)
. Zadanie Wdróż jest uruchamiane tylko wtedy, gdy zadanie kompilacji zakończy się pomyślnie.
# test and upload my code as an artifact named WebSite
jobs:
- job: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- script: npm test
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(System.DefaultWorkingDirectory)'
artifactName: WebSite
# download the artifact and deploy it only if the build job succeeded
- job: Deploy
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: none #skip checking out the default repository resource
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: WebSite
downloadPath: $(Pipeline.Workspace)
dependsOn: Build
condition: succeeded()
Aby uzyskać informacje o korzystaniu z funkcji dependsOn i warunku, zobacz Określanie warunków.
Dostęp do tokenu OAuth
Skrypty uruchomione w zadaniu umożliwiają dostęp do bieżącego tokenu zabezpieczającego usługi Azure Pipelines lub TFS OAuth. Token może służyć do uwierzytelniania w interfejsie API REST usługi Azure Pipelines.
Token OAuth jest zawsze dostępny dla potoków YAML.
Musi być jawnie zamapowany na zadanie lub krok przy użyciu polecenia env
.
Oto przykład:
steps:
- powershell: |
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=4.1-preview"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
env:
SYSTEM_ACCESSTOKEN: $(system.accesstoken)