Udostępnij przez


Zasoby w potokach YAML

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

W tym artykule omówiono zasoby dla ciągów YAML. Zasób to wszystko, czego używa potok, który istnieje poza tym potokiem. Zasoby w potokach YAML mogą być innymi potokami, kompilacjami, kontenerami, pakietami, repozytoriami lub elementami webhook.

Po zdefiniowaniu zasobu można z niego korzystać w dowolnym miejscu w potoku. Aby uzyskać więcej informacji i przykładów, zobacz Definicje zasobów.

resources:
  pipelines:
  - pipeline: resources1
    source: otherPipeline

steps:
- download: resources1
  artifact: artifact1.txt

Stan zasobu umożliwia automatyczne wyzwalanie potoków przez ustawienie trigger właściwości w definicji zasobu. Następnie potok resources.triggeringAlias i resources.triggeringCategory zmienne są ustawiane na nazwę zasobu i kategorię. Te zmienne są puste, chyba że zmienna jest ustawiona Build.Reason na ResourceTriggerwartość .

Zasoby umożliwiają pełne śledzenie usług używanych przez potok, w tym wersję, artefakty, skojarzone zatwierdzenia i elementy robocze. Jeśli subskrybujesz wyzwalanie zdarzeń w zasobach, możesz w pełni zautomatyzować przepływy pracy metodyki DevOps.

Uwaga

W tym artykule omówiono głównie zasoby w potokach YAML. Aby uzyskać informacje o zasobach w potokach klasycznych, zobacz About resources for Azure Pipelines (Informacje o zasobach dla usługi Azure Pipelines).

Autoryzacja zasobów

Zasoby muszą być autoryzowane do użycia 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 ustawień administracyjnych zasobu, aby udzielić uprawnień dostępu do wszystkich potoków. Na przykład można zarządzać bezpiecznymi plikami i grupami zmiennych na stronieBiblioteka> oraz pulami agentów i połączeniami usług wpotokach> projektu. Ta autoryzacja jest wygodna dla zasobów, których nie trzeba ograniczać, takich jak zasoby testowe.

  • Upewnij się, że masz co najmniej rolę użytkownika w rolach zabezpieczeń puli agentów dla projektu. Tworzone potoki YAML są automatycznie autoryzowane do korzystania z zasobów, w których masz rolę użytkownika .

  • Jeśli dodasz definicję zasobu do potoku YAML, ale 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, upewnij się, że masz co najmniej rolę użytkownika w zasobie. Następnie możesz wybrać opcję autoryzowania zasobów w kompilacji, która zakończyła się niepowodzeniem. Po autoryzowanym zasobie możesz rozpocząć nową kompilację.

Sprawdzanie zatwierdzenia zasobów

Możesz użyć kontroli zatwierdzania i szablonów, aby ręcznie kontrolować użycie zasobów. Korzystając z wymaganego sprawdzania zatwierdzenia szablonu, możesz wymagać dowolnego potoku, który używa określonego zasobu lub środowiska do rozszerzenia z określonego szablonu YAML.

Ustawienie wymaganego zatwierdzenia szablonu zwiększa bezpieczeństwo, zapewniając, że zasób jest używany tylko w określonych warunkach. Aby uzyskać więcej informacji, zobacz Używanie szablonów do zabezpieczeń.

Selektor wersji zasobów ręcznych

Usługa Azure Pipelines ocenia domyślne wersje zasobów na podstawie ich definicji zasobów. W przypadku zaplanowanych przebiegów lub przebiegów ręcznych, jeśli nie wybierzesz ręcznie przebiegu, usługa Azure Pipelines uwzględnia tylko pomyślne ukończenie przebiegów ciągłej integracji w celu oceny domyślnych wersji zasobów.

Możesz użyć selektora wersji zasobów ręcznych, aby wybrać różne wersje zasobów podczas ręcznego wyzwalania potoku ciągłego wdrażania YAML (CD). Selektor wersji dla zasobów jest obsługiwany w przypadku zasobów związanych z potokiem, kompilacją, repozytorium, kontenerem oraz pakietem.

W przypadku pipeline zasobów selektor wersji ręcznej umożliwia wyświetlenie wszystkich dostępnych przebiegów we wszystkich gałęziach, przeszukanie przebiegów na podstawie numeru potoku lub gałęzi i wybranie przebiegu, które zakończyło się powodzeniem, niepowodzeniem lub w toku.

Nie musisz czekać na ukończenie przebiegu ciągłej integracji ani uruchomić go ponownie z powodu niepowiązanego błędu, zanim będzie można uruchomić potok ciągłego wdrażania. Masz elastyczność wyboru dowolnego przebiegu, który znasz, wygenerował potrzebne artefakty.

Aby użyć selektora wersji zasobów, wybierz pozycję Zasoby w okienku Potok uruchamiania , wybierz zasób i wybierz 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, możesz wprowadzić żądaną wersję w polu tekstowym.

Zrzut ekranu przedstawiający selektor wersji zasobów repozytorium.

Definicje zasobów

Zasoby potoku YAML mogą być następujące:

Poniższe sekcje zawierają definicje i przykłady kategorii zasobów potoku YAML. Aby uzyskać pełne informacje o schemacie, zobacz definicję zasobów w dokumentacji schematu YAML dla usługi Azure Pipelines.

Zasób potoków

Zasoby ciągłej integracji pipeline można używać jako wyzwalaczy dla przepływów pracy ciągłego wdrażania. Możesz również odwoływać się do pipeline zasobów z potoku, aby pobrać artefakty lub użyć zmiennych zasobów potoku. Tylko Azure Pipelines może używać zasobu pipelines.

pipelines W definicji zasobu:

  • pipeline to unikatowa nazwa używana do odwołowania się do zasobów potoku.
  • source to nazwa potoku, który wygenerował artefakty potoku.

Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.pipelines.pipeline .

Przykładowe definicje zasobów pipeline’u

Poniższa przykładowa definicja zasobu używa artefaktów z potoku w ramach tego samego projektu usługi Azure DevOps.

resources:
  pipelines:
  - pipeline: SmartHotel-resource # identifier to use in pipeline resource variables
    source: SmartHotel-CI # name of the pipeline that produces the artifacts

Aby określić potok z innego projektu, uwzględnij project nazwę w definicji zasobu. W poniższym przykładzie użyto branch również funkcji rozpoznawania wersji domyślnej, 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: otherDevOpsProject
    source: SmartHotel-CI
    branch: releases/M142

Ocena wersji zasobu

Usługa Azure Pipelines ocenia domyślne wersje zasobów na podstawie ich definicji zasobów. Domyślne wersje artefaktów zasobów potoku zależą od tego, czy potok działa ręcznie, czy zgodnie z harmonogramem, czy też wyzwalacze na podstawie wyniku uruchomienia zasobu.

W przypadku ręcznego lub zaplanowanego przebiegu potoku wartości versionwłaściwości , branchi tags w pipeline definicji zasobu definiują wersje artefaktów. Dane branch wejściowe nie mogą mieć symboli wieloznacznych, a tags właściwości używają AND operatora .

W przypadku zaplanowanych przebiegów lub przebiegów ręcznych, jeśli nie używasz selektora wersji, usługa Azure Pipelines uwzględnia tylko pomyślne ukończenie przebiegów ciągłej integracji podczas oceniania domyślnych wersji zasobów. W przypadku przebiegów ręcznych można zastąpić zdefiniowane wersje przy użyciu selektora wersji ręcznej.

W poniższej tabeli wymieniono pipeline właściwości definicji zasobów i określone wersje artefaktów.

Określona właściwość Wersja artefaktu
version Kompilacja zawierająca określony numer przebiegu
branch Najnowsza kompilacja uruchomiona w określonej gałęzi
tags Najnowsza kompilacja zawierająca wszystkie określone tagi
branch i tags Najnowsze uruchomienie kompilacji w określonej gałęzi, która ma wszystkie określone tagi
version i branch Kompilacja z określonym numerem przebiegu i określoną gałęzią
Brak Najnowsza kompilacja we wszystkich gałęziach

Poniższa pipeline definicja zasobu używa branch właściwości i tags do oceny wersji domyślnej, gdy potok jest zaplanowany lub wyzwalany ręcznie. Wersja myCIAlias artefaktów to najnowsze uruchomienie kompilacji w main gałęzi zawierającej Production tagi i PreProduction .

resources:
  pipelines:
  - pipeline: myCIAlias
    project: Fabrikam
    source: Fabrikam-CI
    branch: main
    tags:
    - Production
    - PreProduction

Wyzwalacze zasobów potoku

W przypadku przebiegów potoku, które wyzwalają wynik uruchomienia zasobu, trigger ustawienia właściwości w definicji zasobu określają domyślne wersje artefaktów zasobów. Aby użyć pipeline zasobu jako wyzwalacza do uruchomienia bieżącego potoku, musisz ustawić trigger właściwość . Jeśli nie dołączysz trigger właściwości, przebiegi zasobów nie wyzwalają bieżących przebiegów potoku.

Gdy potok jest wyzwalany na trigger podstawie wartości w pipeline definicji zasobu, wartości ogólnej definicji versionzasobu , branchi właściwości tags są ignorowane. Właściwości trigger określają wersje artefaktów.

Ważne

Podczas definiowania wyzwalacza zasobu pipeline'u:

  • pipeline Jeśli zasób pochodzi z tego samego repozytorium co bieżący potok lub self, wyzwalanie znajduje się w tej samej gałęzi i zatwierdzeniu, które zgłasza zdarzenie wyzwalania.
  • pipeline Jeśli zasób pochodzi z innego repozytorium niż bieżący potok, wyzwalanie jest w domyślnej gałęzi pipeline repozytorium zasobów.

W poniższej tabeli opisano, jak trigger właściwości wpływają na zachowanie wyzwalacza.

Właściwość Wyzwalacz Zachowanie wyzwalacza
true Wyzwalanie występuje, gdy potok zasobów pomyślnie ukończy przebieg.
branches Wyzwalanie występuje, gdy potok zasobów pomyślnie ukończy przebieg w jednej z include gałęzi.
tags Wyzwalanie występuje, gdy potok zasobów pomyślnie ukończy przebieg oznaczony wszystkimi określonymi tagami.
stages Wyzwalanie występuje, gdy potok zasobów pomyślnie uruchomi określony stageselement .
branches, tags i stages Wyzwalanie występuje, gdy pomyślne uruchomienie potoku zasobów spełnia wszystkie warunki gałęzi, tagu i etapu.

W poniższym przykładzie przedstawiono definicję zasobów potoków z prostą triggerdefinicją .

resources:
  pipelines:
  - pipeline: SmartHotel
    project: otherDevOpsProject
    source: SmartHotel-CI
    trigger: true

W poniższym przykładzie przedstawiono zasób trigger potoku z kondycjami gałęzi.

resources:
  pipelines:
  - pipeline: SmartHotel
    project: otherDevOpsProject
    source: SmartHotel-CI
    trigger:
      branches:
      - releases/*
      - resources.triggeringAlias

W poniższym przykładzie użyto stages filtrów do oceny warunków wyzwalacza dla potoków ciągłego wdrażania. Wyzwalacz stages użyj AND operatora . Potok ciągłego wdrażania jest wyzwalany po pomyślnym zakończeniu wszystkich wymienionych etapów.

resources:
  pipelines:
  - pipeline: MyCIAlias  
    project: Fabrikam  
    source: Fabrikam-CI  
    trigger:    
      stages:
      - PreProduction
      - Production

W poniższym przykładzie użyto tags filtrów do domyślnej oceny wersji i wyzwalacza. Tagi trigger używają AND operatora . Zestaw tags w pipeline definicjach zasobów różni się od tagów ustawionych w gałęziach w repozytorium Git.

resources:
  pipelines:
  - pipeline: MyCIAlias
    project: Fabrikam
    source: Fabrikam-CI
    tags: 
    - Production 
    trigger:
      tags:
      - Production
      - Signed

Za każdym razem, gdy uruchamiany jest potok zasobów SmartHotel-CI:

  • Uruchamia się w jednej z releases gałęzi lub gałęzi main .
  • Jest oznaczony tagiem i VerifiedSigned.
  • Kończy zarówno etapy, jak Production i PreProduction .
resources:
  pipelines:
  - pipeline: SmartHotel
    project: otherDevOpsProject
    source: SmartHotel-CI
    trigger:
      branches:
        include:
        - releases/*
        - main
        exclude:
        - topic/*
      tags: 
      - Verified
      - Signed
      stages:
      - Production
      - PreProduction

Pobieranie artefaktu linii przetwarzania

Możesz użyć download kroku w potoku YAML, aby pobrać artefakty skojarzone z bieżącym uruchomieniem lub innym pipeline zasobem.

Artefakty są pobierane automatycznie tylko w zadaniach wdrażania. Wszystkie artefakty z bieżącego potoku i wszystkie jego pipeline zasoby są automatycznie pobierane i są dostępne na początku każdego zadania wdrożenia. To zachowanie można zastąpić, ustawiając downloadnonewartość , lub określając inny pipeline identyfikator zasobu.

W zwykłym zadaniu kompilacji artefakty nie są pobierane automatycznie. W razie potrzeby użyj download jawnie.

download W kroku właściwość opcjonalna artifact określa nazwy artefaktów. Jeśli nie zostanie określony, wszystkie dostępne artefakty zostaną pobrane.

Właściwość opcjonalna patterns definiuje wzorce reprezentujące pliki do pobrania. Aby uzyskać pełne informacje o schemacie, zobacz definicję steps.download .

- job: deploy_windows_x86_agent
  steps:
  - download: SmartHotel
    artifact: WebTier1
    patterns: '**/*.zip'

Artefakty pobrane z pipeline zasobu do elementu $(PIPELINE). WORKSPACE)/<pipeline-identifier>/<artifact-identifier> folder. Aby uzyskać więcej informacji, zobacz Publikowanie i pobieranie artefaktów pipeline. Aby uzyskać alternatywny sposób pobierania artefaktów z potoku, zobacz Pobieranie artefaktów.

Zmienne zasobów potoku

Metadane zasobu potoku są dostępne dla wszystkich zadań w każdym uruchomieniu 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 Definiowanie zmiennych i metadanych zasobów potoku jako wstępnie zdefiniowanych 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 zasób

Jeśli masz system kompilacji ciągłej integracji, który generuje artefakty, możesz wykorzystać artefakty z builds zasobami.

Kategoria builds jest rozszerzalna. Zasób build może pochodzić z dowolnego zewnętrznego systemu ciągłej integracji, takiego jak Jenkins, TeamCity lub CircleCI. Możesz użyć builds polecenia , aby napisać rozszerzenie, aby korzystać z artefaktów z usługi kompilacji lub wprowadzić nowy typ usługi.

W definicji build wartość domyślna version to najnowsza pomyślna kompilacja. W razie potrzeby należy jawnie ustawić trigger . Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.builds.build .

W poniższym przykładzie serwer Jenkins jest typem zasobu.

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 do zadań/zadań 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ć.

Zadanie downloadBuild automatycznie rozpoznaje odpowiednie zadanie pobierania dla typu zasobu zdefiniowanego build przez środowisko uruchomieniowe. Artefakty pobrane z build zasobu do elementu $(PIPELINE). WORKSPACE)/<build-identifier>/ folder.

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 określony, wszystkie artefakty skojarzone z pobieraniem zasobów.

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. Poniższy przykład 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 .

Zasób repozytoriów

Użyj słowa kluczowego repository , aby poinformować system o repozytoriach zewnętrznych, jeśli:

Na przykład:

resources:
  repositories:
  - repository: common
    type: github
    name: Contoso/CommonTools
    endpoint: MyContosoServiceConnection

Aby uzyskać pełne informacje o schemacie, zobacz definicję resources.repositoryies.repository .

Typy zasobów repozytorium

Usługa Azure Pipelines obsługuje gittypy repozytoriów , githubgithubenterprise, 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.

W poniższej repository tabeli opisano typy zasobów:

Typ Wartość nazwy Przykład
git Inne repozytorium w tym samym projekcie lub w tej samej organizacji. Ten sam projekt: name: otherRepo
Inny projekt w tej samej organizacji:
name: otherProject/otherRepo.
github Pełna nazwa repozytorium GitHub, w tym użytkownika lub organizacji. name: myOrganization/otherRepo
githubenterprise Pełna nazwa repozytorium GitHub Enterprise, w tym użytkownika lub organizacji. name: myEnterpriseOrg/otherRepo
bitbucket Pełna nazwa repozytorium Usługi Bitbucket Cloud, w tym użytkownika lub organizacji. name: MyBitbucketOrg/otherRepo

Zmienne zasobów repozytorium

Metadane zasobu repozytorium są dostępne dla wszystkich zadań w każdym uruchomieniu jako zmienne uruchomieniowe. Jest <alias> to repository identyfikator z repository definicji zasobu.

resources.repositories.<alias>.name
resources.repositories.<alias>.ref
resources.repositories.<alias>.type
resources.repositories.<alias>.id
resources.repositories.<alias>.url

Poniższa repository definicja zasobu ma alias common, więc uzyskujesz dostęp do zmiennych zasobów repozytorium 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)"

Metadane zasobu repozytorium są dostępne dla wszystkich zadań w każdym uruchomieniu jako zmienne uruchomieniowe. Jest <alias> to repository identyfikator z repository definicji zasobu.

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 alias common, więc uzyskujesz dostęp do zmiennych zasobów repozytorium 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. Słowo kluczowe służy checkout do pobierania repozytorium zdefiniowanego w zasobie repository . Aby uzyskać więcej informacji, zapoznaj się z artykułem Korzystanie z wielu repozytoriów w potoku. Aby uzyskać pełne informacje o schemacie, zobacz definicję steps.checkout .

Zasób kontenerów

Zasoby umożliwiają korzystanie z containers obrazów kontenerów w potokach ciągłej integracji/ciągłego wdrażania. 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 w ramach zadań lub użyć go w zadaniach kontenera. Jeśli potok wymaga obsługi co najmniej jednej usługi, musisz również utworzyć kontenery usług i połączyć się z nimi. Za pomocą woluminów można udostępniać dane między usługami.

Jeśli musisz używać obrazów z rejestru platformy Docker, możesz zdefiniować ogólny zasób kontenera bez użycia słowa kluczowego 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' wyzwalacze kontenera dla 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. Tego typu zasobu można użyć w zadaniach i włączyć wyzwalacze potoku automatycznego.

Aby korzystać 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, zobacz Gałąź domyślna 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 typu zasobu kontenera acr .

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)

Zasób pakietów

Pakiety NuGet i npm GitHub można konsumować jako zasoby w potokach YAML. Aby włączyć automatyczne wyzwalacze potoku w przypadku wydania nowej wersji pakietu, ustaw trigger właściwość na truewartość .

Podczas definiowania package zasobów określ pakiet <repository>\<name> 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 .

Pakiety nie są domyślnie 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

steps:
- getPackage: contoso

Zasób elementów webhook

Uwaga

Elementy webhook wydane w usłudze Azure DevOps Server 2020.1.

Za pomocą potoku, kontenera, kompilacji i pakietów zasobów usługi Azure Pipelines można używać artefaktów i automatyzować wyzwalaczy, ale nie można ich używać do bazowania wdrożeń na zdarzeniach zewnętrznych lub usługach. Elementy webhook automatyzują przepływ pracy na podstawie zewnętrznych zdarzeń elementu webhook, które nie obsługują zasobów usługi Azure Pipelines pierwszej klasy. Zdarzenia zewnętrzne można subskrybować za pośrednictwem elementów webhook i wyzwalać potoki przy użyciu zdarzeń.

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. W przypadku usług lokalnych, w których usługa Azure DevOps nie ma wglądu w proces, można skonfigurować elementy webhook w usłudze w celu automatycznego wyzwalania potoków.

Aby zasubskrybować zdarzenie elementu webhook, należy zdefiniować webhook zasób w potoku i określić przychodzące połączenie usługi elementu webhook. Aby uzyskać pełne informacje o schemacie, zobacz definicję elementu resources.webhooks.webhook .

Dane ładunku JSON można używać jako zmiennych w zadaniach przy użyciu formatu ${{ parameters.<WebhookAlias>.<JSONPath>}}. Poniższy przykład definiuje, a następnie wywołuje zasób elementu webhook:

resources:
  webhooks:
    - webhook: myWebhookResource
      connection: myWebHookConnection

steps:  
- script: echo ${{ parameters.myWebHookResource.resource.message.title }}

Filtry dla zasobu elementu webhook można zdefiniować na podstawie danych ładunku JSON, aby dostosować wyzwalacze dla każdego potoku. Za każdym razem, gdy przychodzące połączenie usługi elementu webhook odbiera zdarzenie elementu webhook, nowe wyzwalacze uruchamiania dla wszystkich potoków subskrybowanych dla tego zdarzenia elementu webhook.

W poniższym przykładzie użyto filtrów elementu 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}}

Konfiguracja wyzwalacza elementu webhook

Aby skonfigurować wyzwalacz elementu webhook, należy skonfigurować element webhook w usłudze zewnętrznej, podając następujące informacje:

  • Adres URL żądania: https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview
  • Wpis tajny (opcjonalnie): jeśli musisz zabezpieczyć ładunek JSON, podaj wartość wpisu tajnego.

Wprzypadku połączeń usługi Azure DevOps >> Service należy utworzyć nowe przychodzące połączenie usługi elementu webhook. Można na przykład zdefiniować następujące informacje dotyczące typu połączenia z usługą GitHub:

  • Nazwa elementu webhook: nazwa połączenia elementu webhook utworzonego w usłudze zewnętrznej.
  • Wpis tajny (opcjonalnie): skrót HMAC-SHA1 ładunku w celu zweryfikowania żądania przychodzącego. Jeśli podczas tworzenia webhooka użyto sekretu, musisz podać ten sam sekret.
  • Nagłówek HTTP (opcjonalnie): nagłówek HTTP w żądaniu zawierający wartość skrótu HMAC-SHA1 ładunku na potrzeby weryfikacji żądania. Na przykład nagłówek żądania usługi GitHub to X-Hub-Signature.

Zrzut ekranu przedstawiający przychodzące połączenie usługi webhook.

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 potok wyzwalany za pośrednictwem tego elementu webhook nie jest uruchamiany, ponieważ wygenerowany kod YAML jest nieprawidłowy.

Identyfikowalność

Usługa Azure Pipelines zapewnia pełną możliwość śledzenia dowolnego zasobu używanego na poziomie zadania potoku lub wdrożenia. Usługa Azure Pipelines zawiera następujące informacje dotyczące każdego uruchomienia potoku korzystającego z zasobów:

  • Jeśli zasób wyzwolił potok, zasób, który wyzwolił potok.
  • Wersje zasobów i używane artefakty.
  • Zatwierdzenia skojarzone z każdym zasobem.
  • Elementy robocze skojarzone z każdym zasobem.

Informacje dotyczące skojarzonego potoku ciągłego wdrażania dla potoków ciągłej integracji

Aby zapewnić kompleksową możliwość śledzenia, możesz śledzić, które potoki ciągłego wdrażania używają określonego potoku ciągłej pipelines integracji za pośrednictwem zasobu. Jeśli inne potoki używają potoku ciągłej integracji, w widoku Uruchamiania zostanie wyświetlona karta Skojarzone potoki. 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.

Zrzut ekranu przedstawiający informacje o potokach ciągłego wdrażania w potoku ciągłej integracji.

Śledzenie środowiska

Po wdrożeniu potoku w środowisku można wyświetlić listę zasobów, z których korzysta, oraz skojarzonych z nimi zatwierdzeń i elementów roboczych.

Zrzut ekranu przedstawiający commit'y w środowisku.

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 potokowego, związane z nim artefakty są automatycznie pobierane w zadaniach wdrożeniowych.

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 Download Pipeline Artifacts nie zapewnia możliwości śledzenia ani wyzwalaczy, ale czasami warto użyć 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 budowie 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 usługi Docker Hub, dlatego należy skonfigurować klasyczny potok wydania.

  1. Utwórz nowe połączenie usługi Docker Hub.
  2. 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.
  3. 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.
  4. 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>].

Jak mogę zweryfikować i rozwiązać problemy z moim webhookiem?

  1. Utwórz połączenie z usługą.

  2. Odnieś się do połączenia z usługą i nadaj nazwę webhookowi w sekcji webhooks.

    resources:
      webhooks:
        - webhook: MyWebhookTriggerAlias
          connection: MyServiceConnection
    
  3. Uruchom swój pipeline. Element webhook jest tworzony na platformie Azure jako zadanie rozproszone dla organizacji.

  4. Wykonaj wywołanie interfejsu API z prawidłowym POST kodem JSON w treści na https://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:

  1. Wybierz pozycję Edytuj na stronie pipeline'u.
  2. Z menu Więcej akcji wybierz pozycję Wyzwalacze.
  3. Wybierz kartę YAML , a następnie wybierz pozycję Pobierz źródła.
  4. W obszarze Gałąź domyślna dla kompilacji ręcznych i zaplanowanych zaktualizuj gałąź funkcji.
  5. Wybierz Zapisz i zakolejkuj.
  6. Po pomyślnym uruchomieniu tego potoku wykonaj wywołanie POST API z prawidłowym kodem JSON w treści do https://dev.azure.com/<organization>/_apis/public/distributedtask/webhooks/<webhook-name>?api-version=<apiversion>. Powinieneś teraz otrzymać odpowiedź z kodem stanu 200.

Dlaczego mój wyzwalacz zasobu nie zadziałał?

Wyzwalacze zasobów mogą się nie wykonać, ponieważ:

  • Źródło podanego połączenia z usługą jest nieprawidłowe.
  • Wyzwalacz nie jest skonfigurowany lub w wyzwalaczu występują błędy składni.
  • 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 wyzwalaczem nie są dostępne dla zasobów repozytorium.

Zrzut ekranu przedstawiający problemy z wyzwalaczem na stronie głównej przepływu.

Na stronie Problemy z wyzwalaczem komunikaty o błędach i ostrzeżeniach opisują przyczynę niepowodzenia wyzwalacza.

Zrzut ekranu przedstawiający możliwość obsługi problemów z wyzwalaczem.