Zasoby w potokach YAML
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
W tym artykule omówiono zasoby dla ciągów YAML. Zasób to wszystko, co jest używane przez potok, a znajduje się poza nim. Po zdefiniowaniu zasobu można z niego korzystać w dowolnym miejscu w potoku.
Zasoby zapewniają pełną śledzność usług, z których korzysta kolejka, w tym wersję, artefakty, powiązane zatwierdzenia i elementy robocze. Przepływy pracy metodyki DevOps można w pełni zautomatyzować, subskrybując wyzwalanie zdarzeń w zasobach.
Schemat zasobów
Zasoby w języku YAML reprezentują źródła potoków, kompilacji, repozytoriów, kontenerów, pakietów i elementów webhook. Aby uzyskać pełne informacje o schemacie, zobacz definicję zasobów w dokumentacji schematu YAML dla usługi Azure Pipelines.
Gdy zasób uruchamia potok, ustawiane są następujące zmienne:
resources.triggeringAlias
resources.triggeringCategory
Zmienna Build.Reason
musi mieć ResourceTrigger
wartość dla ustawienia tych wartości. Wartości są puste, jeśli dany zasób nie wywołał uruchomienia potoku.
Definicja zasobu potoków
Jeśli masz pipeline, który generuje artefakty, możesz używać tych artefaktów, definiując pipelines
zasób. Tylko Azure Pipelines może używać zasobu pipelines
. Możesz ustawić wyzwalacze dla przepływów pracy ciągłego wdrażania (CD) na zasobie pipeline.
W definicji zasobu, pipeline
to unikalna wartość, której można użyć, aby odnieść się do zasobu potoku na późniejszym etapie potoku. Nazwa source
jest nazwą potoku, który wygenerował artefakt potoku. Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.pipelines.pipeline.
Etykieta zdefiniowana przez pipeline
służy do odniesienia się do zasobu potoku z innych jego części, na przykład podczas używania zmiennych zasobów potoku lub pobierania artefaktów. Aby uzyskać alternatywny sposób pobierania artefaktów z potoku, zobacz Pobieranie artefaktów.
Ważne
Podczas definiowania wyzwalacza zasobu potoku:
-
pipeline
Jeśli zasób pochodzi z tego samego repozytorium co bieżący potok, lubself
wyzwolenie odbywa się w tej samej gałęzi i zatwierdzeniu, na którym jest zgłaszane zdarzenie. - Jeśli zasób potoku pochodzi z innego repozytorium, bieżący potok jest wyzwalany w domyślnej
pipeline
gałęzi repozytorium zasobów.
Przykładowe definicje zasobów potoku
Poniższy przykład wykorzystuje artefakty z linii produkcyjnej w ramach tego samego projektu.
resources:
pipelines:
- pipeline: SmartHotel-resource # identifier to use in pipeline resource variables
source: SmartHotel-CI # name of the pipeline that produces the artifacts
Aby korzystać z potoku z innego projektu, należy dołączyć nazwę projektu i nazwę źródła. W poniższym przykładzie użyto branch
metody do rozwiązania domyślnej wersji, gdy potok jest wyzwalany ręcznie lub zgodnie z harmonogramem. Dane wejściowe dotyczące gałęzi nie mogą zawierać symboli wieloznacznych.
resources:
pipelines:
- pipeline: SmartHotel
project: DevOpsProject
source: SmartHotel-CI
branch: releases/M142
Przykład poniżej pokazuje zasób rurociągu z prostym wyzwalaczem.
resources:
pipelines:
- pipeline: SmartHotel
project: DevOpsProject
source: SmartHotel-CI
trigger: true
W poniższym przykładzie przedstawiono zasób trigger
potoku z kondycjami gałęzi.
resources:
pipelines:
- pipeline: SmartHotel
project: DevOpsProject
source: SmartHotel-CI
trigger:
branches:
- releases/*
- resources.triggeringAlias
W poniższym przykładzie użyto stages
filtrów do oceny kondycji wyzwalających dla potoków CD. Etapy używają AND
operatora . Po pomyślnym zakończeniu wszystkich podanych etapów uruchamiany jest ciąg dostarczania oprogramowania (CD pipeline).
resources:
pipelines:
- pipeline: MyCIAlias
project: Fabrikam
source: Farbrikam-CI
trigger:
stages:
- PreProduction
- Production
W poniższym przykładzie użyto tags
filtrów do domyślnej oceny wersji oraz wyzwalaczy. Tagi używają AND
operatora .
Element tags
jest ustawiany w potoku continuous integration (CI) lub continuous deployment (CD). Te tagi różnią się od tagów ustawionych w gałęziach w repozytorium Git.
resources:
pipelines:
- pipeline: MyCIAlias
project: Fabrikam
source: Farbrikam-CI
tags:
- Production
trigger:
tags:
- Production
- Signed
Ocena wersji artefaktu potoków
Wersja artefaktu w potoku przepływu zasobów zależy od tego, jak potok jest wyzwalany.
Wyzwalacz ręczny lub zaplanowany
Jeśli uruchomienie potoku jest wyzwalane ręcznie lub zaplanowane, wartości właściwości version
, branch
i tags
definiują wersję artefaktu. Dane branch
wejściowe nie mogą mieć symboli wieloznacznych. Właściwości tags
używają operatora AND
.
Określone właściwości | Wersja artefaktu |
---|---|
version |
Artefakty z kompilacji, które mają określony numer uruchomienia |
branch |
Artefakty z najnowszego builda wykonanego w określonej gałęzi |
tags lista |
Artefakty z najnowszej kompilacji zawierającej wszystkie określone tagi |
branch i tags lista |
Artefakty z najnowszej kompilacji utworzonej w określonej gałęzi, która zawiera wszystkie wskazane tagi |
version i branch |
Artefakty z kompilacji z określonym numerem uruchomienia i określoną gałęzią. |
Brak | Artefakty z najnowszej kompilacji we wszystkich gałęziach kodu |
Poniższa pipeline
definicja zasobu wykorzystuje właściwości branch
i tags
do oceny domyślnej wersji, gdy potok jest uruchamiany ręcznie lub według harmonogramu. Po ręcznym wyzwoleniu potoku do uruchomienia, wersja artefaktów potoku MyCIAlias
to najnowsza kompilacja wykonana w gałęzi main
, która zawiera tagi Production
i PrepProduction
.
resources:
pipelines:
- pipeline: MyCIAlias
project: Fabrikam
source: Farbrikam-CI
branch: main
tags:
- Production
- PreProduction
Wyzwalacz zakończenia potoku zasobów
Gdy potok zostanie wyzwolony z powodu ukończenia jednego z jego potoków zasobów, wersja artefaktów jest wersją potoku wyzwalającego. Wartości właściwości version
, branch
i tags
są ignorowane.
Określone wyzwalacze | Wynik |
---|---|
branches |
Nowy przebieg potoku jest wyzwalany za każdym razem, gdy potok zasobów pomyślnie ukończy przebieg w jednej z include gałęzi. |
tags |
Nowy przebieg potoku przetwarzania jest uruchamiany za każdym razem, gdy potok zasobów pomyślnie kończy przebieg oznaczony wszystkimi określonymi tagami. |
stages |
Nowe uruchomienie potoku jest wyzwalane za każdym razem, gdy potok zasobu pomyślnie wykona określony element stages . |
branches , tags i stages |
Nowe uruchomienie potoku jest wyzwalane za każdym razem, gdy potok zasobów spełnia wszystkie warunki gałęzi, tagów i etapów. |
trigger: true |
Nowy przebieg potoku jest wyzwalany za każdym razem, gdy potok zasobów pomyślnie ukończy przebieg. |
Nic | Nie jest uruchamiany żaden nowy przebieg potoku, gdy potok zasobów pomyślnie zakończy swój przebieg. |
Za każdym razem, gdy uruchamiany jest potok zasobów SmartHotel-CI
:
- Uruchamia się na jednej z gałęzi
releases
lub na gałęzimain
. - Jest oznakowany zarówno
Verified
, jak iSigned
- Kończy zarówno etapy
Production
iPreProduction
resources:
pipelines:
- pipeline: SmartHotel
project: DevOpsProject
source: SmartHotel-CI
trigger:
branches:
include:
- releases/*
- main
exclude:
- topic/*
tags:
- Verified
- Signed
stages:
- Production
- PreProduction
Pobieranie artefaktu potoku
Krok download
pobiera artefakty skojarzone z aktualnym uruchomieniem lub innym zasobem potoku.
Wszystkie artefakty z bieżącego pipeline'u i wszystkich jego pipeline
zasobów są automatycznie pobierane i udostępniane na początku każdego zadania wdrożenia. To zachowanie można zastąpić, ustawiając download
na none
, lub przez określenie innego identyfikatora zasobu potoku.
Zwykłe artefakty zadań nie są pobierane automatycznie. W razie potrzeby użyj download
jawnie.
Artefakty z pipeline
zasobu są pobierane do katalogu $(PIPELINE.WORKSPACE)/<pipeline-identifier>/<artifact-identifier>. Aby uzyskać więcej informacji, zobacz Publikowanie i pobieranie artefaktów pipeline.
Właściwość opcjonalna artifact
określa nazwy artefaktów. Jeśli nie określono inaczej, zostaną pobrane wszystkie dostępne artefakty. Właściwość opcjonalna patterns
definiuje wzorce reprezentujące pliki do uwzględnienia. Aby uzyskać pełne informacje o schemacie, zobacz definicję steps.download.
- job: deploy_windows_x86_agent
steps:
- download: SmartHotel
artifact: WebTier1
patterns: '**/*.zip'
Zmienne zasobów potoku
W każdym uruchomieniu metadane zasobu potoku są dostępne dla wszystkich zadań jako wstępnie zdefiniowane zmienne. Te zmienne są dostępne dla Twojego potoku tylko w czasie wykonywania i dlatego nie można ich używać w wyrażeniach szablonów, które są oceniane w czasie kompilacji potoku.
Aby uzyskać więcej informacji, zobacz Pipeline resource metadata as predefined variables (Metadane zasobów potoku jako wstępnie zdefiniowane zmienne). Aby dowiedzieć się więcej na temat składni zmiennych, zobacz Definiowanie zmiennych.
Poniższy przykład zwraca zdefiniowane wartości zmiennych dla zasobu potoku myresourcevars
.
resources:
pipelines:
- pipeline: myresourcevars
source: mypipeline
trigger: true
steps:
- script: |
echo $(resources.pipeline.myresourcevars.pipelineID)
echo $(resources.pipeline.myresourcevars.runName)
echo $(resources.pipeline.myresourcevars.runID)
echo $(resources.pipeline.myresourcevars.runURI)
echo $(resources.pipeline.myresourcevars.sourceBranch)
echo $(resources.pipeline.myresourcevars.sourceCommit)
echo $(resources.pipeline.myresourcevars.sourceProvider)
echo $(resources.pipeline.myresourcevars.requestedFor)
echo $(resources.pipeline.myresourcevars.requestedForID)
Kompiluje definicję zasobu
Jeśli masz zewnętrzny system kompilacji ciągłej integracji (CI), który generuje artefakty, możesz korzystać z artefaktów za pomocą builds
zasobów. Zasób build
może pochodzić z dowolnego zewnętrznego systemu ciągłej integracji, takiego jak Jenkins, TeamCity lub CircleCI.
Kategoria builds
jest rozszerzalna. Możesz napisać rozszerzenie do korzystania z artefaktów z usługi kompilacji i wprowadzić nowy typ usługi w ramach programu builds
.
W definicji build
wartość domyślna version
to najnowsza pomyślna kompilacja. Właściwość trigger
nie jest domyślnie włączona i musi być jawnie ustawiona. Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.builds.build.
W poniższym przykładzie serwer Jenkins jest zasobem type
.
resources:
builds:
- build: Spaceworkz
type: Jenkins
connection: MyJenkinsServer
source: SpaceworkzProj # name of the Jenkins source project
trigger: true
Ważne
Wyzwalacze są obsługiwane tylko dla hostowanego serwera Jenkins, gdy Azure DevOps ma bezpośredni dostęp do serwera Jenkins.
Zadanie downloadBuild
Artefakty build
zasobów nie są automatycznie pobierane w zadaniach i zadaniach wdrażania. Aby korzystać z artefaktów z build
zasobu w ramach swoich zadań, należy wyraźnie dodać downloadBuild
zadanie. Zachowanie pobierania dla każdego wdrożenia lub zadania można dostosować.
To zadanie automatycznie rozwiązuje odpowiednie zadanie pobierania dla typu zasobu definiowanego przez środowisko uruchomieniowe build
. Artefakty z build
zasobu są pobierane do folderu $(PIPELINE.WORKSPACE)/<build-identifier>/.
W definicji downloadBuild
określasz zasób, z którego pobierane są artefakty. Właściwość opcjonalna artifact
określa artefakty do pobrania. Jeśli nie zostanie to określone, zostaną pobrane wszystkie artefakty skojarzone z zasobem.
Właściwość opcjonalna patterns
definiuje ścieżkę minimatch lub listę ścieżek minimatch do pobrania. Jeśli jest puste, cały artefakt zostanie pobrany. Na przykład poniższy fragment kodu pobiera tylko pliki *.zip .
- job: deploy_windows_x86_agent
steps:
- downloadBuild: Spaceworkz
patterns: '**/*.zip'
Aby uzyskać pełne informacje o schemacie, zobacz definicję steps.downloadBuild.
Definicja zasobu repozytorium
Słowo repository
kluczowe umożliwia określenie repozytorium zewnętrznego. Możesz użyć tego zasobu, jeśli twój potok zawiera szablony w innym repozytorium lub chcesz użyć wyewidencjonowania wielu repozytoriów z repozytorium wymagającym połączenia z usługą. Należy poinformować system o tych repozytoriach.
Na przykład:
resources:
repositories:
- repository: common
type: github
name: Contoso/CommonTools
endpoint: MyContosoServiceConnection
Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.repositories.repository.
Typy zasobów repozytorium
Usługa Azure Pipelines obsługuje następujące wartości dla typu repozytorium: git
, , github
githubenterprise
i bitbucket
.
- Typ
git
odnosi się do repozytoriów Git usługi Azure Repos. - Repozytoria GitHub Enterprise wymagają połączenia usługi GitHub Enterprise w celu autoryzacji.
- Repozytoria usługi Bitbucket Cloud wymagają połączenia usługi Bitbucket w chmurze na potrzeby autoryzacji.
Typ | Wartość nazwy | Przykład |
---|---|---|
type: git |
Inne repozytorium w tym samym projekcie lub tej samej organizacji. | Ten sam projekt: name: otherRepo Inny projekt w tej samej organizacji: name: otherProject/otherRepo . |
type: github |
Pełna nazwa repozytorium GitHub, w tym użytkownika lub organizacji. | name: Microsoft/vscode |
type: githubenterprise |
Pełna nazwa repozytorium GitHub Enterprise, w tym użytkownika lub organizacji. | name: Microsoft/vscode |
type: bitbucket |
Pełna nazwa repozytorium Usługi Bitbucket Cloud, w tym użytkownika lub organizacji. | name: MyBitbucket/vscode |
Zmienne zasobów repozytorium
W każdym przebiegu następujące metadane zasobu repozytorium są dostępne dla wszystkich zadań w postaci zmiennych środowiska uruchomieniowego.
<Alias>
to identyfikator, który nadajesz zasobowi repozytorium.
resources.repositories.<Alias>.name
resources.repositories.<Alias>.ref
resources.repositories.<Alias>.type
resources.repositories.<Alias>.id
resources.repositories.<Alias>.url
Poniższy przykład zawiera zasób repozytorium z aliasem common
, więc dostęp do zmiennych zasobów repozytorium jest uzyskiwany przy użyciu polecenia resources.repositories.common.*
.
resources:
repositories:
- repository: common
type: git
ref: main
name: Repo
variables:
ref: $[ resources.repositories.common.ref ]
name: $[ resources.repositories.common.name ]
id: $[ resources.repositories.common.id ]
type: $[ resources.repositories.common.type ]
url: $[ resources.repositories.common.url ]
steps:
- bash: |
echo "name = $(name)"
echo "ref = $(ref)"
echo "id = $(id)"
echo "type = $(type)"
echo "url = $(url)"
W każdej iteracji dostępne dla wszystkich zadań są następujące metadane zasobu repozytorium w postaci zmiennych uruchomieniowych.
<Alias>
to identyfikator, który nadajesz zasobowi repozytorium.
resources.repositories.<Alias>.name
resources.repositories.<Alias>.ref
resources.repositories.<Alias>.type
resources.repositories.<Alias>.id
resources.repositories.<Alias>.url
resources.repositories.<Alias>.version
Poniższy przykład zawiera zasób repozytorium z aliasem common
, więc dostęp do zmiennych zasobów repozytorium jest uzyskiwany przy użyciu polecenia resources.repositories.common.*
.
resources:
repositories:
- repository: common
type: git
ref: main
name: Repo
variables:
ref: $[ resources.repositories.common.ref ]
name: $[ resources.repositories.common.name ]
id: $[ resources.repositories.common.id ]
type: $[ resources.repositories.common.type ]
url: $[ resources.repositories.common.url ]
version: $[ resources.repositories.common.version ]
steps:
- bash: |
echo "name = $(name)"
echo "ref = $(ref)"
echo "id = $(id)"
echo "type = $(type)"
echo "url = $(url)"
echo "version = $(version)"
Pobierz słowo kluczowe dla repozytoriów
Repozytoria z zasobu repository
nie są automatycznie synchronizowane w zadaniach. Użyj słowa kluczowego checkout
, aby pobrać repozytorium zdefiniowane jako część repository
zasobu. Aby uzyskać pełne informacje o schemacie, zobacz definicję steps.checkout.
Aby uzyskać więcej informacji, zapoznaj się z artykułem Korzystanie z wielu repozytoriów w potoku.
Definicja zasobu kontenerów
Jeśli musisz wykorzystywać obrazy kontenerów w swoich potokach CI/CD, możesz użyć zasobów containers
. Zasób container
może być publicznym lub prywatnym rejestrem platformy Docker lub wystąpieniem usługi Azure Container Registry.
Możesz użyć ogólnego obrazu zasobu kontenera jako części swojego zadania lub użyć tego zasobu dla zadań kontenera. Jeśli potok wymaga wsparcia jednego lub więcej serwisów, musisz utworzyć i połączyć się z kontenerami serwisów. Za pomocą woluminów można udostępniać dane między usługami.
Jeśli musisz używać obrazów z rejestru Docker w ramach przepływu pracy, możesz zdefiniować ogólny zasób kontenera. Nie jest wymagane żadne słowo kluczowe type
. Na przykład:
resources:
containers:
- container: smartHotel
endpoint: myDockerRegistry
image: smartHotelApp
Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.containers.container.
Uwaga
Składnia umożliwiająca enabled: 'true'
włączanie wyzwalaczy kontenera dla wszystkich tagów obrazów różni się od składni innych wyzwalaczy zasobów. Pamiętaj, aby użyć poprawnej składni dla określonych zasobów.
Typ zasobu usługi Azure Container Registry
Aby korzystać z obrazów Azure Container Registry, możesz użyć pierwszoklasowego zasobu kontenerowego acr
. Można użyć tego typu zasobu jako części procesów roboczych oraz włączyć automatyczne wyzwalacze potoku pracy.
Do korzystania z wyzwalaczy potoku automatycznego potrzebujesz uprawnień współautora lub właściciela usługi Azure Container Registry. Aby uzyskać więcej informacji, zobacz Role i uprawnienia usługi Azure Container Registry.
Aby użyć typu zasobu acr
, należy określić wartości azureSubscription
, resourceGroup
i repository
dla rejestru kontenerów Azure. Na przykład:
resources:
containers:
- container: petStore
type: acr
azureSubscription: ContosoConnection
resourceGroup: ContosoGroup
registry: petStoreRegistry
repository: myPets
trigger:
tags:
include:
- production*
Uwaga
Ocena wyzwalacza odbywa się tylko w gałęzi domyślnej. Pamiętaj, aby ustawić poprawną gałąź domyślną lub scalić plik YAML z bieżącą gałęzią domyślną. Aby uzyskać więcej informacji na temat zmiany gałęzi domyślnej potoku, odwiedź Domyślną gałąź potoku.
Zmienne zasobów kontenera
Po zdefiniowaniu kontenera jako zasobu metadane obrazu kontenera są przekazywane do potoku jako zmienne. Informacje, takie jak obraz, rejestr i szczegóły połączenia, są dostępne we wszystkich zadaniach używanych w zadaniach wdrażania kontenera.
Zmienne zasobów kontenera współpracują z platformą Docker i usługą Azure Container Registry. Nie można używać zmiennych zasobów kontenera dla kontenerów obrazów lokalnych. Zmienna location
ma zastosowanie tylko do acr
typu zasobów kontenera.
Poniższy przykład zawiera połączenie usługi Azure Resource Manager o nazwie arm-connection
. Aby uzyskać więcej informacji, zobacz Rejestry kontenerów platformy Azure, repozytoria i obrazy.
resources:
containers:
- container: mycontainer
type: ACR
azureSubscription: arm-connection
resourceGroup: rg-storage-eastus
registry: mycontainerregistry
repository: hello-world
trigger:
tags:
- latest
steps:
- script: echo |
echo $(resources.container.mycontainer.type)
echo $(resources.container.mycontainer.registry)
echo $(resources.container.mycontainer.repository)
echo $(resources.container.mycontainer.tag)
echo $(resources.container.mycontainer.digest)
echo $(resources.container.mycontainer.URI)
echo $(resources.container.mycontainer.location)
Definicja zasobu pakietów
Pakiety NuGet i npm GitHub można konsumować jako zasoby w potokach YAML. Aby włączyć automatyczne wyzwalacze potoku po wydaniu nowej wersji pakietu, ustaw trigger
właściwość na true
.
Podczas definiowania package
zasobów określ repozytorium</>nazwę< pakietu >we name
właściwości i ustaw pakiet type
jako NuGet
lub npm
. Aby korzystać z pakietów GitHub, użyj uwierzytelniania opartego na osobistym tokenie dostępu (PAT) i utwórz połączenie usługi GitHub korzystające z tokenu PAT.
Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.packages.package.
Domyślnie pakiety nie są automatycznie pobierane do zadań. Aby pobrać, użyj polecenia getPackage.
Poniższy przykład zawiera połączenie usługi GitHub o nazwie pat-contoso
z pakietem npm usługi GitHub o nazwie contoso
. Aby uzyskać więcej informacji, zobacz Pakiety GitHub.
resources:
packages:
- package: contoso
type: npm
connection: pat-contoso
name: myname/contoso
version: 7.130.88
trigger: true
pool:
vmImage: 'ubuntu-latest'
steps:
- getPackage: contoso
Definicja zasobu webhooków
Uwaga
Webhooki wprowadzono w usłudze Azure DevOps Server 2020.1.
Możesz korzystać z artefaktów i włączać automatyczne wyzwalacze za pomocą zasobów takich jak potoki, kontenery, kompilacje i pakiety. Nie można jednak używać tych zasobów do automatyzowania wdrożeń na podstawie zdarzeń zewnętrznych lub usług.
Zasób webhooks
w potokach YAML umożliwia integrację potoków z usługami zewnętrznymi, takimi jak GitHub, GitHub Enterprise, Nexus i Artifactory, aby zautomatyzować przepływy pracy. Możesz subskrybować dowolne zdarzenia zewnętrzne za pośrednictwem webhooków i używać tych zdarzeń do wyzwalania swoich potoków.
Elementy webhook automatyzują przepływ pracy na podstawie dowolnego zewnętrznego zdarzenia elementu webhook, które nie jest obsługiwane przez zasoby pierwszej klasy, takie jak potoki, kompilacje, kontenery lub pakiety. Ponadto, w przypadku usług lokalnych, gdzie Azure DevOps nie ma dostępu do procesu, można skonfigurować webhooki na usłudze i automatycznie wyzwalać pipeline'y.
Aby zasubskrybować zdarzenie webhook, należy zdefiniować zasób webhook w potoku i podłączyć go do przychodzącego połączenia usługi webhook. Można również zdefiniować więcej filtrów dla zasobu webhooka na podstawie danych ładunku JSON, aby dostosować wyzwalacze dla każdego pipeline'u.
Za każdym razem, gdy połączenie usługi webhook odbiera zdarzenie webhook, uruchamiany jest nowy proces dla wszystkich potoków subskrybowanych na to zdarzenie webhook. Dane ładunku JSON można wykorzystywać w zadaniach jako zmienne, korzystając z formatu ${{ parameters.<WebhookAlias>.<JSONPath>}}
.
Aby uzyskać pełne informacje o schemacie, zobacz definicję elementu resources.webhooks.webhook.
W poniższym przykładzie zdefiniowano zasób webhook.
resources:
webhooks:
- webhook: WebHook
connection: IncomingWH
steps:
- script: echo ${{ parameters.WebHook.resource.message.title }}
Wyzwalacze webhooków
Aby skonfigurować wyzwalacze webhook, należy najpierw skonfigurować webhook w usłudze zewnętrznej, podając następujące informacje:
-
Adres URL żądania:
https://dev.azure.com/<Azure DevOps organization>/_apis/public/distributedtask/webhooks/<webhook name>?api-version=6.0-preview
- Wpis tajny (opcjonalnie): jeśli musisz zabezpieczyć ładunek JSON, podaj wartość wpisu tajnego.
Następnie utworzysz nowe połączenie usługi przychodzącego webhooka. W przypadku tego typu połączenia z usługą należy zdefiniować następujące informacje:
- Nazwa WebHook: Taka sama jak WebHook utworzony w Twojej usłudze zewnętrznej.
- Tajny (opcjonalnie): służy do weryfikowania skrótu HMAC-SHA1 ładunku w celu potwierdzenia przychodzącego żądania. Jeśli podczas tworzenia webhooka użyto sekretu, musisz podać ten sam sekret.
-
Nagłówek HTTP: Nagłówek HTTP w żądaniu zawierający wartość skrótu HMAC-SHA1 ładunku, służącą do weryfikacji żądania. Na przykład nagłówek żądania usługi GitHub to
X-Hub-Signature
.
Aby uruchomić potok przy użyciu webhooka, należy wysłać POST
żądanie do https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview
. Ten punkt końcowy jest publicznie dostępny i nie wymaga autoryzacji. Żądanie powinno mieć treść podobną do następującego przykładu:
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Uwaga
Uzyskiwanie dostępu do danych z treści żądania webhooka może prowadzić do nieprawidłowego kodu YAML. Na przykład krok - script: echo ${{ parameters.WebHook.resource.message }}
potoku importuje cały komunikat JSON, co generuje nieprawidłowy plik YAML. Żaden ciąg wyzwolony za pośrednictwem tego webhooka nie jest uruchamiany, ponieważ wygenerowany kod YAML stał się nieprawidłowy.
Poniższy fragment kodu przedstawia kolejny przykład użycia filtrów webhook.
resources:
webhooks:
- webhook: MyWebhookTrigger
connection: MyWebhookConnection
filters:
- path: repositoryName
value: maven-releases
- path: action
value: CREATED
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host ${{ parameters.MyWebhookTrigger.repositoryName}}
Write-Host ${{ parameters.MyWebhookTrigger.component.group}}
Selektor wersji ręcznej dla zasobów
Po ręcznym wyzwoleniu potoku ciągłego wdrażania YAML, usługa Azure Pipelines automatycznie ocenia domyślne wersje zasobów zdefiniowanych w potoku na podstawie wprowadzonych danych. Jednak usługa Azure Pipelines uwzględnia pomyślne przebiegi ciągłej integracji tylko podczas oceniania domyślnej wersji dla zaplanowanych wyzwalaczy lub jeśli nie wybierzesz ręcznie wersji.
Narzędzie wyboru wersji zasobów umożliwia ręczne wybranie innej wersji podczas tworzenia procesu. Selektor wersji dla zasobów jest obsługiwany w przypadku zasobów związanych z potokiem, kompilacją, repozytorium, kontenerem oraz pakietem.
W przypadku zasobów potoku można wyświetlić wszystkie dostępne uruchomienia we wszystkich gałęziach, przeszukać je na podstawie numeru potoku lub gałęzi, a następnie wybrać uruchomienie zakończone powodzeniem, niepowodzone lub w toku. Ta elastyczność zapewnia, że możesz uruchomić potok ciągłego wdrażania, gdy jesteś pewny, że przebieg wygenerował wszystkie artefakty, których potrzebujesz. Nie musisz czekać na ukończenie procesu CI ani ponownie uruchamiać go z powodu niepowiązanego błędu w etapie.
Aby użyć selektora wersji zasobów, w okienku Uruchamianie potoku kliknij Zasoby, następnie wybierz zasób i określoną wersję z listy dostępnych wersji.
W przypadku zasobów, w których nie można pobrać dostępnych wersji, takich jak pakiety GitHub, selektor wersji udostępnia pole tekstowe, aby można było wprowadzić wersję do wyboru.
Autoryzacja zasobów w potokach YAML
Zasoby muszą być autoryzowane, zanim będą mogły być używane w potokach. Właściciele zasobów kontrolują użytkowników i procesy, które mogą uzyskiwać dostęp do swoich zasobów. Istnieje kilka sposobów na autoryzację potoku YAML do korzystania z zasobów.
Użyj doświadczenia w zarządzaniu zasobami, aby zezwolić wszystkim potokom na dostęp do zasobu. Na przykład grupy zmiennych i bezpieczne pliki są zarządzane na stronie Biblioteka w obszarze Potoki, a pule agentów i połączenia usług są zarządzane w ustawieniach programu Project. Ta autoryzacja jest wygodna, jeśli nie musisz ograniczać dostępu do zasobów, takich jak w przypadku zasobów testowych.
Podczas tworzenia potoku wszystkie zasoby, do których odwołuje się plik YAML, są automatycznie autoryzowane do użycia przez potok, jeśli masz rolę Użytkownika dla tych zasobów.
Jeśli dodasz zasób do pliku YAML i kompilacja zakończy się niepowodzeniem z powodu błędu, takiego jak
Could not find a <resource> with name <resource-name>. The <resource> does not exist or has not been authorized for use.
, zostanie wyświetlona opcja autoryzowania zasobów w kompilacji, która zakończyła się niepowodzeniem.Jeśli jesteś członkiem roli Użytkownik dla zasobu, możesz wybrać tę opcję i autoryzować zasób w kompilacji, która zakończyła się niepowodzeniem. Po autoryzowanym zasobie możesz rozpocząć nową kompilację.
Sprawdź, czy role zabezpieczeń puli agentów dla projektu są poprawne.
Sprawdzanie zatwierdzenia zasobów
Możesz użyć sprawdzania zatwierdzenia i szablonów, aby ręcznie kontrolować, kiedy zasób ma być uruchomiony. W przypadku sprawdzania zatwierdzenia wymaganego szablonu można wymagać, aby dowolny potok używający zasobu lub środowiska rozszerzał się z określonego szablonu YAML.
Ustawienie wymaganego zatwierdzenia szablonu gwarantuje, że zasób jest używany tylko w określonych warunkach i zwiększa bezpieczeństwo. Aby dowiedzieć się więcej o tym, jak poprawić bezpieczeństwo potoku za pomocą szablonów, zobacz Korzystanie z szablonów dla bezpieczeństwa.
Identyfikowalność
Usługa Azure Pipelines zapewnia pełną możliwość śledzenia dowolnego zasobu używanego na poziomie zadania potoku lub wdrożenia.
Śledzenie rurociągu
Usługa Azure Pipelines zawiera następujące informacje dotyczące każdego uruchomienia potoku:
- Jeśli zasób wyzwolił potok, zasób, który wyzwolił potok.
- Wersja zasobu i wykorzystywane artefakty.
- Zatwierdzenia skojarzone z każdym zasobem.
- Elementy robocze skojarzone z każdym zasobem.
Śledzenie środowiska
Za każdym razem, gdy potok danych jest wdrażany w środowisku, można wyświetlić listę zasobów, które są zużywane. Widok obejmuje zasoby wykorzystywane w ramach zadań wdrożeniowych oraz powiązane z nimi zatwierdzenia i elementy robocze.
Skojarzone informacje o pipeline'ach ciągłego wdrażania w pipeline'ach CI
Aby zapewnić śledzenie na każdym etapie, możesz monitorować, które potoki ciągłego wdrażania używają określonego potoku ciągłej integracji za pośrednictwem elementu pipelines
. Jeśli inne potoki korzystają z twojego potoku CI, zobaczysz kartę Skojarzone potoki w widoku Uruchamiania. Widok przedstawia wszystkie uruchomienia potoku YAML ciągłego wdrożenia (CD), które wykorzystują potok ciągłej integracji (CI) oraz artefakty z niego.
Problemy z wyzwalaczem zasobów
Nie można wykonać wyzwalaczy zasobów, ponieważ:
- Źródło podanego połączenia z usługą jest nieprawidłowe, występują błędy składni w wyzwalaczu lub wyzwalacz nie jest skonfigurowany.
- Warunki wyzwalacza nie zostały spełnione.
Aby sprawdzić, dlaczego wyzwalacze potoku nie wykonały się, wybierz pozycję menu Problemy z wyzwalaczami na stronie definicji potoku. Problemy z aktywacją są dostępne tylko dla zasobów innych niż repozytorium.
Na stronie Problemy z wyzwalaczem komunikaty o błędach i ostrzeżeniach opisują przyczynę niepowodzenia wyzwalacza.
Często zadawane pytania
Kiedy należy używać zasobów potoków, skrótu pobierania lub zadania Pobierz artefakty potoku?
Użycie zasobu to sposób na korzystanie z artefaktów z potoku CI, jak również na konfigurowanie zautomatyzowanych wyzwalaczy. Zasób zapewnia pełny wgląd w proces, wyświetlając używaną wersję, artefakty, commity i elementy robocze. Podczas definiowania zasobu potoku skojarzone artefakty są automatycznie pobierane w zadaniach wdrażania.
Możesz użyć skrótu download
, aby pobrać artefakty w zadaniach kompilacji lub zmienić domyślne pobieranie w zadaniach wdrażania. Aby uzyskać więcej informacji, zobacz definicję steps.download.
Zadanie Pobierz artefakty potoku nie zapewnia możliwości śledzenia ani wyzwalaczy, ale czasami warto używać tego zadania bezpośrednio. Na przykład może istnieć zadanie skryptu przechowywane w innym szablonie, które wymaga pobrania artefaktów z kompilacji. Możesz też nie chcieć dodać zasobu potoku do szablonu. Aby uniknąć zależności, możesz użyć zadania Pobierz artefakty potoku, aby przekazać wszystkie informacje o kompilacji do zadania.
Jak mogę wyzwolić uruchomienie potoku po zaktualizowaniu obrazu usługi Docker Hub?
Wyzwalacz zasobu kontenera nie jest dostępny dla potoków YAML w usłudze Docker Hub, dlatego należy skonfigurować klasyczny potok wydawniczy.
- Utwórz nowe połączenie usługi Docker Hub.
- Utwórz klasyczny potok wydania i dodaj artefakt usługi Docker Hub. Ustaw połączenie usługi i wybierz przestrzeń nazw, repozytorium, wersję i alias źródłowy.
- Wybierz wyzwalacz i włącz wyzwalacz ciągłego wdrażania, przełączając go na Włączony. Każdy push Docker do wybranego repozytorium tworzy wydanie.
- Utwórz nowy etap i zadanie. Dodaj dwa zadania: logowanie do Docker i Bash.
- Zadanie Docker ma działanie
login
i loguje Cię do Docker Hub. - Zadanie Bash uruchamia
docker pull <hub-user>/<repo-name>[:<tag>]
.
- Zadanie Docker ma działanie
Jak mogę zweryfikować i rozwiązać problemy z moim webhookiem?
Utwórz połączenie z usługą.
Odnieś się do połączenia z usługą i nadaj nazwę webhookowi w sekcji
webhooks
.resources: webhooks: - webhook: MyWebhookTriggerAlias connection: MyServiceConnection
Uruchom swój pipeline. Element webhook jest tworzony na platformie Azure jako zadanie rozproszone dla organizacji.
Wykonaj wywołanie interfejsu API z prawidłowym
POST
kodem JSON w treści nahttps://dev.azure.com/<organization>/_apis/public/distributedtask/webhooks/<webhook-name>?api-version=<apiversion>
. Jeśli otrzymasz odpowiedź z kodem statusu 200, webhook jest gotowy do użycia przez twoją linię przetwarzania.
Jeśli otrzymasz odpowiedź z kodem stanu 500 z błędem Cannot find webhook for the given webHookId ...
, kod może znajdować się w gałęzi, która nie jest gałęzią domyślną. Aby rozwiązać ten problem:
- Wybierz pozycję Edytuj na stronie pipeline'u.
- Z menu Więcej akcji wybierz pozycję Wyzwalacze.
- Wybierz kartę YAML , a następnie wybierz pozycję Pobierz źródła.
- W obszarze Gałąź domyślna dla kompilacji ręcznych i zaplanowanych zaktualizuj gałąź funkcji.
- Wybierz Zapisz i zakolejkuj.
- Po pomyślnym uruchomieniu tego potoku wykonaj wywołanie interfejsu
POST
API z prawidłowym kodem JSON w treści nahttps://dev.azure.com/<organization>/_apis/public/distributedtask/webhooks/<webhook-name>?api-version=<apiversion>
. Powinieneś teraz otrzymać odpowiedź z kodem stanu 200.