Samouczek: automatyzowanie kompilacji obrazu kontenera w chmurze podczas zatwierdzania kodu źródłowego
Oprócz szybkiego zadania usługa ACR Tasks obsługuje automatyczne kompilacje obrazu kontenera platformy Docker w chmurze podczas zatwierdzania kodu źródłowego w repozytorium Git. Obsługiwane konteksty git dla usługi ACR Tasks obejmują publiczne lub prywatne repozytoria GitHub lub Azure Repos.
Uwaga
Obecnie usługa ACR Tasks nie obsługuje wyzwalaczy zatwierdzania ani żądań ściągnięcia w repozytoriach GitHub Enterprise.
W tym samouczku zadanie usługi ACR kompiluje i wypycha pojedynczy obraz kontenera określony w pliku Dockerfile podczas zatwierdzania kodu źródłowego do repozytorium Git. Aby utworzyć wieloetapowe zadanie , które używa pliku YAML do definiowania kroków tworzenia, wypychania i opcjonalnie testowania wielu kontenerów w zatwierdzeniu kodu, zobacz Samouczek: uruchamianie wieloetapowego przepływu pracy kontenera w chmurze podczas zatwierdzania kodu źródłowego. Omówienie zadań usługi ACR można znaleźć w temacie Automate OS and framework patching with ACR Tasks (Automatyzowanie stosowania poprawek systemu operacyjnego i struktury za pomocą usługi ACR Tasks)
W tym samouczku:
- Utwórz zadanie
- 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 kompilacji
Po ukończeniu kroków wymaganych do włączenia usługi ACR Tasks w celu odczytywania stanu zatwierdzenia i tworzenia elementów webhook w repozytorium możesz utworzyć zadanie, które wyzwala kompilację obrazu kontenera po zatwierdzeniu do repozytorium.
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 .
Uwaga
Plik Dockerfile używany w poniższym przykładzie zależy od publicznego obrazu kontenera podstawowego z usługi Docker Hub. Aby zwiększyć niezawodność podczas korzystania z zawartości publicznej, zaimportuj obraz i zarządzaj nim w prywatnym rejestrze kontenerów platformy Azure, a następnie zaktualizuj plik Dockerfile do korzystania z obrazu podstawowego zarządzanego prywatnie. Dowiedz się więcej o pracy z obrazami publicznymi.
az acr task create \
--registry $ACR_NAME \
--name taskhelloworld \
--image helloworld:{{.Run.ID}} \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--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 skompiluje obraz kontenera z kodu w tej gałęzi. Do kompilowania obrazu jest używany plik Dockerfile określony przez parametr --file
z katalogu głównego repozytorium. Argument --image
określa wartość sparametryzowaną elementu {{.Run.ID}}
dla części wersji tagu obrazu, zapewniając, że skompilowany obraz jest powiązany z określoną kompilacją i jest jednoznacznie oznakowany.
Dane wyjściowe z pomyślnie wykonanego polecenia az acr task create przypominają następujące dane:
{
"agentConfiguration": {
"cpu": 2
},
"creationDate": "2010-11-19T22:42:32.972298+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
"location": "westcentralus",
"name": "taskhelloworld",
"platform": {
"architecture": "amd64",
"os": "Linux",
"variant": null
},
"provisioningState": "Succeeded",
"resourceGroup": "myregistry",
"status": "Enabled",
"step": {
"arguments": [],
"baseImageDependencies": null,
"contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
"dockerFilePath": "Dockerfile",
"imageNames": [
"helloworld:{{.Run.ID}}"
],
"isPushEnabled": true,
"noCache": false,
"type": "Docker"
},
"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#main",
"sourceControlAuthProperties": null,
"sourceControlType": "GitHub"
},
"sourceTriggerEvents": [
"commit"
],
"status": "Enabled"
}
]
},
"type": "Microsoft.ContainerRegistry/registries/tasks"
}
Testowanie zadania kompilacji
Masz teraz zadanie, które definiuje kompilację. Aby przetestować potok kompilacji, należy ręcznie wyzwolić kompilację, wykonując polecenie az acr task run:
az acr task run --registry $ACR_NAME --name taskhelloworld
Domyślnie polecenie az acr task run
przesyła strumieniowo dane wyjściowe dziennika do konsoli podczas wykonywania polecenia. Dane wyjściowe są skondensowane w celu wyświetlenia kluczowych kroków.
2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon 23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:11 Executing step: push
2020/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloworld
tag: da2
digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 9-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git:
git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf
Run ID: ca6 was successful after 27s
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 wyzwala i rozpoczyna kompilację 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: ca7
[...]
Run ID: ca7 was successful after 38s
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
-------- -------------- ---------- --------- --------- -------------------- ----------
ca7 taskhelloworld linux Succeeded Commit 2020-11-19T22:54:34Z 00:00:29
ca6 taskhelloworld linux Succeeded Manual 2020-11-19T22:51:47Z 00:00:24
ca5 linux Succeeded Manual 2020-11-19T22:23:42Z 00:00:23
Następne kroki
W tym samouczku pokazano, jak używać zadania w celu automatycznego wyzwalania kompilacji obrazu kontenera na platformie Azure po zatwierdzeniu kodu źródłowego do repozytorium Git. Przejdź do kolejnego samouczka, aby dowiedzieć się, jak utworzyć zadania, które wyzwalają kompilacje przy aktualizacji obrazu podstawowego obrazu kontenera.