Esercitazione: Automatizzare la compilazione di immagini dei contenitori nel cloud quando si esegue il commit di codice sorgente.
Oltre alle attività rapide, Attività del Registro Azure Container supporta le compilazioni automatizzate di contenitori Docker nel cloud quando si esegue il commit di codice sorgente in un repository Git. I contesti Git supportati per Attività del Registro Azure Container includono repository pubblici o privati di GitHub o di Azure.
Nota
Attualmente, Attività del Registro Azure Container non supporta i trigger per il commit o le richieste pull nei repository di GitHub Enterprise.
In questa esercitazione, l'attività del Registro Azure Container compila ed esegue il push di una singola immagine del contenitore specificata in un Dockerfile quando si esegue il commit di codice sorgente in un repository Git. Per creare un'attività in più passaggi che usa un file YAML per definire i passaggi per compilare, eseguire il push e facoltativamente testare più contenitori con il commit di codice, consultare Esercitazione: Eseguire un flusso di lavoro container in più passaggi nel cloud quando si esegue il commit del codice sorgente. Per una panoramica di Attività del Registro Azure Container, consultare Automatizzare l'applicazione di patch dei sistemi operativi e del framework con Attività del Registro Azure Container
Contenuto dell'esercitazione:
- Crea un'attività
- Testare l'attività
- Visualizzare lo stato dell'attività
- Attivare l'attività con un commit di codice
Questa esercitazione presuppone che siano già state completate le procedure dell'esercitazione precedente. Se non è già stato fatto, prima di procedere eseguire i passaggi descritti nella sezione Prerequisiti dell'esercitazione precedente.
Prerequisiti
Ottenere il codice di esempio
Questa esercitazione presuppone che siano già state completate le procedure dell'esercitazione precedente e che siano state eseguite la copia tramite fork e la clonazione del repository di esempio. Se non è già stato fatto, prima di procedere eseguire i passaggi descritti nella sezione Prerequisiti dell'esercitazione precedente.
Registro contenitori
Per completare questa esercitazione è necessario che la sottoscrizione di Azure includa un Registro Azure Container. Se è necessario un registro, vedere l'esercitazione precedente oppure Guida introduttiva: Creare un registro contenitori con l'interfaccia della riga di comando di Azure.
Creare un token di accesso personale GitHub
Per attivare una compilazione in caso di commit in un repository Git, Attività del Registro Azure Container richiede un token di accesso personale per accedere al repository. Se non si ha già un token di accesso personale, completare questi passaggi per generarne uno in GitHub:
Passare alla pagina per la creazione di token di accesso personali in GitHub all'indirizzo https://github.com/settings/tokens/new
Immettere una breve descrizione del token, ad esempio "ACR Tasks Demo".
Selezionare gli ambiti per l'accesso di Registro Azure Container al repository. Per accedere a un repository pubblico come in questa esercitazione, in repo abilitare repo:status e public_repo.
Nota
Per generare un token di accesso personale per accedere a un repository privato, selezionare l'ambito per il controllo repo completo.
Selezionare il pulsante Generate token (Genera token). Potrebbe essere richiesto di confermare la password.
Copiare e salvare il token generato in una posizione sicura. Questo token verrà usato per definire un'attività nella sezione seguente.
Preparare l'ambiente per l'interfaccia della riga di comando di Azure
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Creare l'attività di compilazione
Dopo aver completato i passaggi necessari per consentire ad Attività del Registro Azure Container di leggere lo stato del commit e creare webhook in un repository, è possibile creare un'attività che attiva la compilazione di un'immagine del contenitore in caso di commit nel repository.
Per prima cosa, popolare queste variabili di ambiente della shell con i valori appropriati per l'ambiente in uso. Questo passaggio non è obbligatorio, ma semplifica in parte l'esecuzione dei comandi su più righe dell'interfaccia della riga di comando di Azure. Se non si popolano queste variabili di ambiente, sarà necessario sostituire manualmente ogni valore in ogni occorrenza nei comandi di esempio.
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
Creare quindi l'attività eseguendo questo comando az acr task create.
Nota
Il Dockerfile usato nell'esempio seguente dipende da un'immagine del contenitore di base pubblica proveniente dall'hub Docker. Per migliorare l'affidabilità quando si usa contenuto pubblico, importare e gestire l'immagine in un registro Azure Container privato e aggiornare il Dockerfile per usare l'immagine di base gestita privatamente. Altre informazioni sull'uso delle immagini pubbliche.
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
L'attività specifica che ogni volta che verrà eseguito il commit di codice nel ramo principale del repository specificato da --context
, Attività del Registro Azure Container compilerà l'immagine del contenitore dal codice in tale ramo. Per creare l'immagine viene usato il Dockerfile specificato da --file
presente nella radice del repository. L'argomento --image
specifica un valore {{.Run.ID}}
con parametri per la parte della versione del tag dell'immagine, affinché l'immagine compilata sia correlata a una compilazione specifica e contrassegnata con un tag univoco.
L'output di un comando az acr task create riuscito è simile al seguente:
{
"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"
}
Testare l'attività di compilazione
È ora disponibile un'attività che definisce la compilazione. Per testare la pipeline di compilazione, attivare manualmente una compilazione eseguendo il comando az acr task run:
az acr task run --registry $ACR_NAME --name taskhelloworld
Quando viene eseguito dall'utente, il comando az acr task run
per impostazione predefinita trasmette l'output di log alla console. L'output è ridotto in modo da mostrare i passaggi principali.
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
Attivare una compilazione con un commit
Dopo aver testato l'attività eseguendola manualmente, attivarla automaticamente con una modifica del codice sorgente.
Prima di tutto, verificare di trovarsi nella directory contenente il clone locale del repository:
cd acr-build-helloworld-node
Eseguire quindi questi comandi per eseguire la creazione, il commit e il push di un nuovo file nel fork del repository in GitHub:
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Quando si esegue il comando git push
, potrebbe essere richiesto di specificare le credenziali di GitHub. Immettere il nome utente GitHub e il token di accesso personale creato in precedenza per la password.
Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>
Dopo aver eseguito il push di un commit nel repository, il webhook creato da ACR Tasks viene attivato e avvia una compilazione in Registro Azure Container. Visualizzare i log dell'attività attualmente in esecuzione per verificarne e monitorarne lo stato di avanzamento:
az acr task logs --registry $ACR_NAME
L'output è simile al seguente e mostra l'attività attualmente in esecuzione o l'ultima attività eseguita:
Showing logs of the last created run.
Run ID: ca7
[...]
Run ID: ca7 was successful after 38s
Elencare le compilazioni
Per visualizzare un elenco delle esecuzioni di attività completate da Attività del Registro Azure Container, eseguire il comando az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
L'output del comando dovrebbe essere simile al seguente e mostra le esecuzioni eseguite da ACR Tasks, con "Git Commit" nella colonna TRIGGER per l'attività più recente:
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
Passaggi successivi
In questa esercitazione è stato illustrato come usare un'attività per attivare automaticamente compilazioni delle immagini dei contenitori in Azure quando si esegue il commit di codice sorgente in un repository Git. Passare all'esercitazione successiva per informazioni su come creare attività che attivano compilazioni quando viene aggiornata l'immagine di base di un'immagine del contenitore.