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 podrzędnego
- 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
W samouczku założono, że zostały już wykonane kroki z poprzedniego samouczka oraz że przykładowe repozytorium zostało rozwidlone i sklonowane. 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 wyzwolić zadanie zatwierdzenia w repozytorium Git, usługa ACR Tasks potrzebuje osobistego tokenu dostępu (PAT), aby uzyskać dostęp do repozytorium. Jeśli nie masz jeszcze patu, wykonaj następujące kroki, aby wygenerować go w usłudze GitHub:
Przejdź do strony tworzenia tokenu PAT w witrynie GitHub pod adresem https://github.com/settings/tokens/new
Wprowadź krótki opis dla tokenu, na przykład „Przykładowe zadanie ACR Tasks”
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 repozytorium włącz repozytorium:status i public_repo
Uwaga
Aby wygenerować token dostępu do prywatnego repozytorium, wybierz zakres pełnej kontroli repozytorium .
Wybierz przycisk Generate token (Generuj token) (może zostać wyświetlony monit o potwierdzenie hasła)
Skopiuj i zapisz wygenerowany token w bezpiecznej lokalizacji (użyjesz tego tokenu podczas definiowania zadania w następnej sekcji)
Przygotowywanie środowiska dla interfejsu wiersza polecenia platformy Azure
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Tworzenie zadania wieloetapowego
Po wykonaniu kroków wymaganych do włączenia usługi ACR Tasks odczytywania stanu zatwierdzenia i tworzenia elementów webhook w repozytorium utwórz wieloetapowe zadanie, które wyzwala kompilowanie, uruchamianie i wypychanie obrazu kontenera.
YAML file
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:
build
Uruchamia krok w celu skompilowania obrazu z pliku Dockerfile w katalogu roboczym. Obraz jest przeznaczony dlaRun.Registry
obiektu , rejestru, w którym jest uruchamiane zadanie, i jest oznaczony unikatowym identyfikatorem uruchomienia zadań usługi ACR.cmd
Uruchamia krok, aby uruchomić obraz w kontenerze tymczasowym. Ten przykład uruchamia długotrwały kontener w tle i zwraca identyfikator kontenera, a następnie zatrzymuje kontener. W rzeczywistym scenariuszu możesz uwzględnić kroki testowania uruchomionego kontenera, aby upewnić się, że działa prawidłowo.- W kroku
push
wypycha obraz skompilowany do rejestru uruchomień.
Polecenie zadania
Najpierw wypełnij te zmienne środowiskowe powłoki przy użyciu wartości odpowiednich dla danego ś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ść wszędzie tam, gdzie będzie wyświetlana 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ługę , usługa ACR Tasks uruchomi zadanie wieloetapowe z kodu w tej gałęzi. Plik YAML określony przez z --file
katalogu głównego 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 przetestowaniu zadania przez jego ręczne uruchomienie, wyzwól je automatycznie za pomocą zmiany 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 do utworzenia, zatwierdzenia i wypchnięcia nowego pliku do rozwidlenia repozytorium w usłudze GitHub:
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Być może podczas wykonywania polecenia git push
będzie konieczne wprowadzenie poświadczeń usługi 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.
YAML file
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}}
To wieloetapowe zadanie wykonuje następujące czynności:
- Uruchamia dwa
build
kroki tworzenia obrazów z pliku Dockerfile w katalogu roboczym:- Pierwszy element jest przeznaczony dla
Run.Registry
systemu , rejestru, w którym jest uruchamiane zadanie, i jest oznaczony identyfikatorem uruchomienia zadań usługi ACR. - Drugi element docelowy rejestru zidentyfikowany przez wartość
regDate
, która została ustawiona podczas tworzenia zadania (lub podaj za pośrednictwem pliku zewnętrznegovalues.yaml
przekazanego doaz acr task create
elementu ). Ten obraz jest oznaczony datą uruchomienia.
- Pierwszy element jest przeznaczony dla
- 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. - W kroku
push
wypycha skompilowane obrazy, pierwszy do rejestru uruchomień, drugi do rejestru zidentyfikowanego przezregDate
program .
Polecenie 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 wypchnąć obrazy do rejestru zidentyfikowane 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 dostępem do rejestru w zakresie roli AcrPush , aby mieć uprawnienia do wypychania obrazów. Aby utworzyć jednostkę 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 i hasło jednostki usługi w poniższym az acr task credential add
poleceniu. 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, wyzwól 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
Następne 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 utworzyć zadania, które wyzwalają kompilacje przy aktualizacji obrazu podstawowego obrazu kontenera.