Udostępnij przez


Samouczek: uruchamianie wieloetapowego przepływu pracy kontenera w chmurze podczas zatwierdzania kodu źródłowego

Oprócz szybkiego zadania usługa ACR Tasks obsługuje wieloetapowe, wielokontenerowe przepływy pracy, które mogą być wyzwalane automatycznie podczas zatwierdzania kodu źródłowego w repozytorium Git.

Z tego samouczka dowiesz się, jak używać przykładowych plików YAML do definiowania zadań wieloetapowych, które kompilują, uruchamiają i wypychają jeden lub więcej obrazów kontenerów do rejestru podczas zatwierdzania kodu źródłowego. Aby utworzyć zadanie, które automatyzuje tylko pojedynczą kompilację obrazu podczas zatwierdzania kodu, zobacz Samouczek: automatyzowanie kompilacji obrazu kontenera w chmurze podczas zatwierdzania kodu źródłowego. Aby zapoznać się z omówieniem zadań usługi ACR, zobacz Automatyzowanie stosowania poprawek systemu operacyjnego i struktury za pomocą usługi ACR Tasks,

W tym samouczku:

  • Definiowanie zadania wieloetapowego przy użyciu pliku YAML
  • Utwórz zadanie
  • Opcjonalnie dodaj poświadczenia do zadania w celu umożliwienia dostępu do innego rejestru
  • Testowanie zadania
  • Wyświetlanie stanu zadania
  • Wyzwalanie zadania po zatwierdzeniu kodu

W samouczku założono, że zostały już wykonane kroki z poprzedniego samouczka. Jeśli nie zostało to jeszcze zrobione, przed kontynuowaniem wykonaj kroki wymienione w poprzednim samouczku w części poświęconej wymaganiom wstępnym.

Wymagania wstępne

Pobieranie przykładowego kodu

Ten samouczek zakłada, że już wykonałeś kroki z poprzedniego samouczka oraz że rozwidliłeś i sklonowałeś przykładowe repozytorium. Jeśli nie zostało to jeszcze zrobione, przed kontynuowaniem wykonaj kroki wymienione w poprzednim samouczku w części poświęconej wymaganiom wstępnym.

Rejestr kontenerów

Aby ukończyć ten samouczek, w Twojej subskrypcji platformy Azure musisz posiadać rejestr kontenerów platformy Azure. Jeśli potrzebujesz rejestru, zobacz poprzedni samouczek lub Szybki start: tworzenie rejestru kontenerów za pomocą interfejsu wiersza polecenia platformy Azure.

Tworzenie osobistego tokenu dostępu GitHub

Aby uruchomić zadanie przy zatwierdzeniu do repozytorium Git, usługa ACR Tasks potrzebuje osobistego tokenu dostępu (PAT) do repozytorium. Jeśli nie masz jeszcze PAT, wykonaj następujące kroki, aby go wygenerować na GitHubie:

  1. Przejdź do strony tworzenia tokenu PAT w witrynie GitHub pod adresem https://github.com/settings/tokens/new

  2. Wprowadź krótki opis dla tokenu, na przykład „Przykładowe zadanie ACR Tasks”

  3. Wybierz zakresy usługi ACR, aby uzyskać dostęp do repozytorium. Aby uzyskać dostęp do publicznego repozytorium, tak jak w tym samouczku, w obszarze repo włącz repo:status i public_repo

    Zrzut ekranu strony generowania osobistego tokenu dostępu w usłudze GitHub

    Uwaga / Notatka

    Aby wygenerować token dostępu do prywatnego repozytorium, wybierz zakres pełnego zarządzania repozytorium.

  4. Wybierz przycisk Generate token (Generuj token) (może zostać wyświetlony monit o potwierdzenie hasła)

  5. Skopiuj i zapisz wygenerowany token w bezpiecznej lokalizacji (użyjesz tego tokenu podczas definiowania zadania w następnej sekcji)

    Zrzut ekranu przedstawiający wygenerowany osobisty token dostępu w usłudze GitHub

Przygotuj swoje środowisko dla Azure CLI

Tworzenie zadania wieloetapowego

Skoro już zakończyłeś wykonywanie kroków wymaganych do włączenia usługi ACR Tasks do odczytywania statusu zatwierdzenia i tworzenia webhooków w repozytorium, utwórz wieloetapowe zadanie, które uruchamia proces kompilacji, uruchamiania i wypychania obrazu kontenera.

Plik YAML

Kroki dla zadania wieloetapowego definiuje się w pliku YAML. Pierwsze przykładowe zadanie wieloetapowe dla tego samouczka jest zdefiniowane w pliku taskmulti.yaml, który znajduje się w katalogu głównym sklonowanego repozytorium GitHub:

version: v1.1.0
steps:
# Build target image
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push image
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}

To wieloetapowe zadanie wykonuje następujące czynności:

  1. Uruchamia krok build w celu zbudowania obrazu z Dockerfile w katalogu roboczym. Obraz jest przeznaczony dla Run.Registry, rejestru, w którym zadanie jest uruchamiane, i jest oznaczony unikatowym identyfikatorem uruchomienia zadań ACR.
  2. Uruchamia krok cmd, aby uruchomić obraz w kontenerze tymczasowym. Ten przykład uruchamia kontener działający w tle na dłuższy czas i zwraca identyfikator kontenera, po czym zatrzymuje kontener. W rzeczywistym scenariuszu możesz uwzględnić kroki testowania uruchomionego kontenera, aby upewnić się, że działa prawidłowo.
  3. W kroku push przesyła zbudowany obraz do rejestru uruchomieniowego.

Komenda zadania

Najpierw wypełnij te zmienne środowiskowe powłoki wartościami odpowiednimi dla twojego środowiska. Ten krok nie jest ściśle wymagany, ale trochę ułatwia wykonywanie przedstawionych w tym samouczku wielowierszowych poleceń interfejsu wiersza polecenia platformy Azure. Jeśli te zmienne środowiskowe nie zostaną wypełnione, należy ręcznie zastąpić każdą wartość w każdym miejscu, gdzie się pojawia w przykładowych poleceniach.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section

Teraz utwórz zadanie, wykonując następujące polecenie az acr task create :

az acr task create \
    --registry $ACR_NAME \
    --name example1 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti.yaml \
    --git-access-token $GIT_PAT

To zadanie określa, że za każdym razem, gdy kod jest zatwierdzany w gałęzi głównej w repozytorium określonym przez --context, usługa ACR Tasks uruchomi wieloetapowe zadanie z kodu w tej gałęzi. Plik YAML określony przez --file w katalogu głównym repozytorium definiuje kroki.

Dane wyjściowe z pomyślnie wykonanego polecenia az acr task create przypominają następujące dane:

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2020-11-20T03:14:31.763887+00:00",
  "credentials": null,
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskmulti",
  "location": "westus",
  "name": "example1",
  "platform": {
    "architecture": "amd64",
    "os": "linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myresourcegroup",
  "status": "Enabled",
  "step": {
    "baseImageDependencies": null,
    "contextAccessToken": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node.git#main",
    "taskFilePath": "taskmulti.yaml",
    "type": "FileTask",
    "values": [],
    "valuesFilePath": null
  },
  "tags": null,
  "timeout": 3600,
  "trigger": {
    "baseImageTrigger": {
      "baseImageTriggerType": "Runtime",
      "name": "defaultBaseimageTriggerName",
      "status": "Enabled"
    },
    "sourceTriggers": [
      {
        "name": "defaultSourceTriggerName",
        "sourceRepository": {
          "branch": "main",
          "repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node.git#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "Github"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

Testowanie wieloetapowego przepływu pracy

Aby przetestować zadanie wieloetapowe, uruchom je ręcznie, wykonując polecenie az acr task run :

az acr task run --registry $ACR_NAME --name example1

Domyślnie polecenie az acr task run przesyła strumieniowo dane wyjściowe dziennika do konsoli podczas wykonywania polecenia. Dane wyjściowe pokazują postęp uruchamiania każdego z kroków zadania. Dane wyjściowe poniżej są skondensowane w celu wyświetlenia kluczowych kroków.

Queued a run with ID: cab
Waiting for an agent...
2020/11/20 00:03:31 Downloading source code...
2020/11/20 00:03:33 Finished downloading source code
2020/11/20 00:03:33 Using acb_vol_cfe6bd55-3076-4215-8091-6a81aec3d1b1 as the home volume
2020/11/20 00:03:33 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 00:03:34 Successfully set up Docker network: acb_default_network
2020/11/20 00:03:34 Setting up Docker configuration...
2020/11/20 00:03:34 Successfully set up Docker configuration
2020/11/20 00:03:34 Logging in to registry: myregistry.azurecr.io
2020/11/20 00:03:35 Successfully logged into myregistry.azurecr.io
2020/11/20 00:03:35 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:35 Scanning for dependencies...
2020/11/20 00:03:36 Successfully scanned dependencies
2020/11/20 00:03:36 Launching container with name: acb_step_0
Sending build context to Docker daemon  24.06kB
[...]
Successfully built f669bfd170af
Successfully tagged myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:43 Successfully executed container: acb_step_0
2020/11/20 00:03:43 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:43 Launching container with name: acb_step_1
279b1cb6e092b64c8517c5506fcb45494cd5a0bd10a6beca3ba97f25c5d940cd
2020/11/20 00:03:44 Successfully executed container: acb_step_1
2020/11/20 00:03:44 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:44 Pushing image: myregistry.azurecr.io/hello-world:cf19, attempt 1
[...]
2020/11/20 00:03:46 Successfully pushed image: myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:46 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 7.425169)
2020/11/20 00:03:46 Populating digests for step ID: acb_step_0...
2020/11/20 00:03:47 Successfully populated digests for step ID: acb_step_0
2020/11/20 00:03:47 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 0.827129)
2020/11/20 00:03:47 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 2.112113)
2020/11/20 00:03:47 The following dependencies were found:
2020/11/20 00:03:47
- image:
    registry: myregistry.azurecr.io
    repository: hello-world
    tag: cf19
    digest: sha256:6b981a8ca8596e840228c974c929db05c0727d8630465de536be74104693467a
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 1a3065388a0238e52865db1c8f3e97492a43444c

Run ID: cab was successful after 18s

Wyzwalanie kompilacji za pomocą zatwierdzenia

Teraz, po ręcznym przetestowaniu zadania, uruchom je automatycznie poprzez zmianę kodu źródłowego.

Najpierw upewnij się, że jesteś w katalogu zawierającym lokalny klon repozytorium:

cd acr-build-helloworld-node

Następnie uruchom następujące polecenia, aby utworzyć, zatwierdzić i przesłać nowy plik do Twojego forka repozytorium na GitHubie:

echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main

Podczas wykonywania polecenia git push może być wymagane podanie danych logowania do GitHub. Podaj nazwę użytkownika usługi GitHub i wprowadź osobisty token dostępu (PAT) utworzony wcześniej dla hasła.

Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>

Po wypchnięciu zatwierdzenia do repozytorium element webhook utworzony przez usługę ACR Tasks zostanie wyzwolony i rozpocznie zadanie w usłudze Azure Container Registry. Wyświetl dzienniki dla aktualnie uruchomionego zadania, aby sprawdzić i monitorować postęp kompilacji:

az acr task logs --registry $ACR_NAME

Dane wyjściowe są podobne do następujących danych i przedstawiają aktualnie (lub ostatnio) wykonywane zadanie:

Showing logs of the last created run.
Run ID: cad

[...]

Run ID: cad was successful after 37s

Lista kompilacji

Aby wyświetlić listę przebiegów zadań, które usługa ACR Tasks wykonała dla rejestru, uruchom polecenie az acr task list-runs:

az acr task list-runs --registry $ACR_NAME --output table

Dane wyjściowe polecenia powinny wyglądać podobnie do następujących danych. Wyświetlone zostaną przebiegi wykonane przez usługę ACR Tasks, a dla najnowszego zadania w kolumnie TRIGGER pojawi się pozycja „Git Commit”:

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
cad       example1        linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:35
cac       taskhelloworld  linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:22
cab       example1        linux       Succeeded  Manual     2020-11-20T00:18:36Z  00:00:47

Tworzenie zadania wieloetapowego obejmującego wiele rejestrów

Usługa ACR Tasks domyślnie ma uprawnienia do wypychania lub ściągania obrazów z rejestru, w którym jest uruchamiane zadanie. Możesz chcieć uruchomić wieloetapowe zadanie, które jest przeznaczone dla co najmniej jednego rejestru oprócz uruchomionego rejestru. Na przykład może być konieczne skompilowanie obrazów w jednym rejestrze i przechowywanie obrazów z różnymi tagami w drugim rejestrze, do którego uzyskuje się dostęp w systemie produkcyjnym. W tym przykładzie pokazano, jak utworzyć takie zadanie i podać poświadczenia dla innego rejestru.

Jeśli nie masz jeszcze drugiego rejestru, utwórz go na potrzeby tego przykładu. Jeśli potrzebujesz rejestru, zobacz poprzedni samouczek lub Szybki start: tworzenie rejestru kontenerów za pomocą interfejsu wiersza polecenia platformy Azure.

Aby utworzyć zadanie, potrzebna jest nazwa serwera logowania rejestru, który ma postać mycontainerregistrydate.azurecr.io (wszystkie małe litery). W tym przykładzie użyjesz drugiego rejestru do przechowywania obrazów oznaczonych datą kompilacji.

Plik YAML

Drugie przykładowe zadanie wieloetapowe dla tego samouczka jest zdefiniowane w pliku taskmulti-multiregistry.yaml, który znajduje się w katalogu głównym sklonowanego repozytorium GitHub:

version: v1.1.0
steps:
# Build target images
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
- build: -t {{.Values.regDate}}/hello-world:{{.Run.Date}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push images
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}
  - {{.Values.regDate}}/hello-world:{{.Run.Date}}

Wieloetapowe zadanie to wykonuje następujące działania:

  1. Uruchamia dwa build kroki tworzenia obrazów z pliku Dockerfile w katalogu roboczym:
    • Pierwszy celuje w Run.Registry, rejestr, w którym uruchamiane jest zadanie, i jest oznaczony identyfikatorem uruchomienia zadań ACR.
    • Drugie miejsce docelowe rejestru zidentyfikowane przez wartość regDate, której ustawiasz podczas tworzenia zadania (lub przekazujesz za pośrednictwem zewnętrznego pliku values.yaml do az acr task create). Ten obraz jest oznaczony datą uruchomienia.
  2. Uruchamia krok uruchamiania cmd jednego z wbudowanych kontenerów. Ten przykład uruchamia długotrwały kontener w tle i zwraca identyfikator kontenera, a następnie zatrzymuje kontener. W rzeczywistym scenariuszu możesz przetestować uruchomiony kontener, aby upewnić się, że działa prawidłowo.
  3. W kroku push wypycha skompilowane obrazy, pierwszy do rejestru uruchomień, drugi do rejestru zidentyfikowanego przez regDateprogram .

Komenda zadania

Korzystając ze zdefiniowanych wcześniej zmiennych środowiskowych powłoki, utwórz zadanie, wykonując następujące polecenie az acr task create . Zastąp nazwę rejestru mycontainerregistrydate.

az acr task create \
    --registry $ACR_NAME \
    --name example2 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti-multiregistry.yaml \
    --git-access-token $GIT_PAT \
    --set regDate=mycontainerregistrydate.azurecr.io

Dodawanie poświadczeń zadania

Aby wysłać obrazy do rejestru zidentyfikowanego przez wartość regDate, użyj polecenia az acr task credential add, aby dodać poświadczenia logowania dla tego rejestru do zadania.

W tym przykładzie zalecamy utworzenie jednostki usługi z uprawnieniami do wypychania obrazów do rejestru. Aby udzielić uprawnień do wypychania, przypisz rolę Container Registry Repository Writer dla rejestrów, które mają włączoną kontrolę dostępu opartego na atrybutach Microsoft ABAC, w celu zarządzania uprawnieniami repozytoriów opartych na Microsoft Entra. W przeciwnym razie w przypadku rejestrów innych niż ABAC przypisz AcrPush rolę.

Aby utworzyć główną nazwę usługi, użyj następującego skryptu:

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

Przekaż identyfikator aplikacji głównej usługi i hasło w poniższym poleceniu az acr task credential add. Pamiętaj, aby zaktualizować nazwę serwera logowania mycontainerregistrydate o nazwie drugiego rejestru:

az acr task credential add --name example2 \
    --registry $ACR_NAME \
    --login-server mycontainerregistrydate.azurecr.io \
    --username <service-principal-application-id> \
    --password <service-principal-password>

Interfejs wiersza polecenia zwraca nazwę dodanego serwera logowania rejestru.

Testowanie wieloetapowego przepływu pracy

Tak jak w poprzednim przykładzie, aby przetestować zadanie wieloetapowe, uruchom je ręcznie, wykonując polecenie az acr task run. Aby wyzwolić zadanie z zatwierdzeniem w repozytorium Git, zobacz sekcję Wyzwalanie kompilacji z zatwierdzeniem.

az acr task run --registry $ACR_NAME --name example2

Domyślnie polecenie az acr task run przesyła strumieniowo dane wyjściowe dziennika do konsoli podczas wykonywania polecenia. Tak jak poprzednio, dane wyjściowe pokazują postęp uruchamiania każdego z kroków zadania. Dane wyjściowe są skondensowane w celu wyświetlenia kluczowych kroków.

Wyjście:

Queued a run with ID: cf1g
Waiting for an agent...
2020/11/20 04:33:39 Downloading source code...
2020/11/20 04:33:41 Finished downloading source code
2020/11/20 04:33:42 Using acb_vol_4569b017-29fe-42bd-83b2-25c45a8ac807 as the home volume
2020/11/20 04:33:42 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 04:33:43 Successfully set up Docker network: acb_default_network
2020/11/20 04:33:43 Setting up Docker configuration...
2020/11/20 04:33:44 Successfully set up Docker configuration
2020/11/20 04:33:44 Logging in to registry: mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Successfully logged into mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Logging in to registry: mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Successfully logged into mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:47 Scanning for dependencies...
2020/11/20 04:33:47 Successfully scanned dependencies
2020/11/20 04:33:47 Launching container with name: acb_step_0
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:33:55 Successfully executed container: acb_step_0
2020/11/20 04:33:55 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:55 Scanning for dependencies...
2020/11/20 04:33:56 Successfully scanned dependencies
2020/11/20 04:33:56 Launching container with name: acb_step_1
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:33:57 Successfully executed container: acb_step_1
2020/11/20 04:33:57 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:57 Launching container with name: acb_step_2
721437ff674051b6be63cbcd2fa8eb085eacbf38d7d632f1a079320133182101
2020/11/20 04:33:58 Successfully executed container: acb_step_2
2020/11/20 04:33:58 Executing step ID: acb_step_3. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:58 Launching container with name: acb_step_3
test
2020/11/20 04:34:09 Successfully executed container: acb_step_3
2020/11/20 04:34:09 Executing step ID: acb_step_4. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:34:09 Pushing image: mycontainerregistry.azurecr.io/hello-world:cf1g, attempt 1
The push refers to repository [mycontainerregistry.azurecr.io/hello-world]
[...]
2020/11/20 04:34:12 Successfully pushed image: mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:34:12 Pushing image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z, attempt 1
The push refers to repository [mycontainerregistrydate.azurecr.io/hello-world]
[...]
2020/11/20 04:34:19 Successfully pushed image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:34:19 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 8.125744)
2020/11/20 04:34:19 Populating digests for step ID: acb_step_0...
2020/11/20 04:34:21 Successfully populated digests for step ID: acb_step_0
2020/11/20 04:34:21 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.009281)
2020/11/20 04:34:21 Populating digests for step ID: acb_step_1...
2020/11/20 04:34:23 Successfully populated digests for step ID: acb_step_1
2020/11/20 04:34:23 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 0.795440)
2020/11/20 04:34:23 Step ID: acb_step_3 marked as successful (elapsed time in seconds: 11.446775)
2020/11/20 04:34:23 Step ID: acb_step_4 marked as successful (elapsed time in seconds: 9.734973)
2020/11/20 04:34:23 The following dependencies were found:
2020/11/20 04:34:23
- image:
    registry: mycontainerregistry.azurecr.io
    repository: hello-world
    tag: cf1g
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc
- image:
    registry: mycontainerregistrydate.azurecr.io
    repository: hello-world
    tag: 20190503-043342z
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc

Run ID: cf1g was successful after 46s

Dalsze kroki

W tym samouczku przedstawiono sposób tworzenia wieloetapowych zadań opartych na wielu kontenerach, które są automatycznie wyzwalane podczas zatwierdzania kodu źródłowego w repozytorium Git. Aby uzyskać zaawansowane funkcje zadań wieloetapowych, w tym równoległe i zależne wykonywanie kroków, zobacz dokumentację YAML usługi ACR Tasks. Przejdź do kolejnego samouczka, aby dowiedzieć się, jak tworzyć zadania, które inicjują budowy przy aktualizacji podstawowego obrazu kontenera.