Tutoriel : Automatiser la génération des images conteneur dans le cloud lorsque vous validez le code source
En plus d'une tâche rapide, ACR Tasks prend en charge la génération d'images de conteneur Docker dans le cloud lorsque vous validez le code source dans un référentiel Git. Les contextes Git pris en charge par ACR Tasks incluent les dépôts GitHub publics ou privés et Azure Repos.
Notes
Actuellement, ACR Tasks ne prend pas en charge les déclencheurs de validation et de demande de tirage (pull request) dans les référentiels GitHub Enterprise.
Dans ce tutoriel, votre tâche ACR génère et envoie (push) une seule image conteneur spécifiée dans un Dockerfile lorsque vous validez le code source dans un référentiel Git. Pour créer une tâche à plusieurs étapes utilisant un fichier YAML pour définir les étapes permettant de créer, d’envoyer (push) et éventuellement de tester plusieurs conteneurs lors de la validation du code, consultez Tutoriel : Exécuter un workflow de conteneur à plusieurs étapes dans le cloud lorsque vous validez le code source. Pour une vue d’ensemble d’ACR Tasks, consultez Automatiser les mises à jour correctives du système d’exploitation et de l'infrastructure avec ACR Tasks.
Dans ce tutoriel, vous allez :
- Créer une tâche
- Tester la tâche
- Affichage de l’état de la tâche
- Déclencher la tâche avec une validation de code
Pour suivre ce didacticiel, vous devez avoir déjà effectué les étapes du didacticiel précédent. Si ce n’est déjà fait, effectuez les étapes de la section Conditions préalables du didacticiel précédent avant de continuer.
Prérequis
Obtenir un exemple de code
Pour suivre ce didacticiel, vous devez avoir déjà effectué les étapes du didacticiel précédent et avoir dupliqué et cloné l’exemple de référentiel. Si ce n’est déjà fait, effectuez les étapes de la section Conditions préalables du didacticiel précédent avant de continuer.
Registre de conteneurs
Pour effectuer ce didacticiel, vous devez disposer d’un registre de conteneurs Azure dans votre abonnement Azure. Si vous avez besoin d’un registre, consultez le didacticiel précédent ou Démarrage rapide : Créer un registre de conteneurs à l’aide de l’interface de ligne de commande Azure.
Créer un jeton d’accès personnel GitHub
Pour déclencher une tâche basée sur une validation dans un dépôt Git, ACR Tasks a besoin d’un jeton d’accès personnel (PAT) pour accéder au dépôt. Si vous ne disposez pas encore de jeton PAT, suivez ces étapes pour en générer un dans GitHub :
Accédez à la page de création du jeton d’accès personnel sur GitHub à l’adresse https://github.com/settings/tokens/new.
Entrez une brève description du jeton, par exemple, « Démo ACR Tasks »
Sélectionnez les étendues d’accès au référentiel pour ACR. Pour accéder à un référentiel public comme dans ce didacticiel, sous référentiel, cochez les cases repo:status et public_repo
Notes
Pour générer un jeton d’accès personnel pour accéder à un référentiel privé, sélectionnez l’étendue pour un contrôle de référentiel intégral.
Sélectionnez le bouton Générer un jeton (vous pouvez être invité à confirmer votre mot de passe).
Copiez et enregistrez le jeton généré dans un emplacement sécurisé (vous utiliserez ce jeton lorsque vous définirez une tâche dans la section suivante)
Préparation de votre environnement pour Azure CLI
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Créer la tâche de génération
Maintenant que vous avez terminé les étapes requises pour permettre à ACR Tasks de lire l’état de validation et de créer des webhooks dans un référentiel, vous pouvez créer une tâche qui déclenche une génération d’image conteneur lors de la validation dans le référentiel.
Tout d’abord, renseignez ces variables d’environnement shell avec des valeurs appropriées pour votre environnement. Cette étape n’est pas strictement obligatoire, mais facilite un peu l’exécution des commandes multilignes de l’interface de ligne de commande Azure de ce didacticiel. Si vous ne renseignez pas ces variables d’environnement, vous devrez remplacer manuellement chaque valeur à chaque fois qu’elle apparaît dans les exemples de commandes.
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
Maintenant, créez la tâche en exécutant la commande az acr task create suivante.
Notes
Le fichier Dockerfile utilisé dans l’exemple suivant dépend d’une image conteneur de base publique de Docker Hub. Pour améliorer la fiabilité lors de l’utilisation de contenu public, importez et gérez l’image dans un registre de conteneurs Azure privé et mettez à jour votre fichier Dockerfile pour qu’il utilise votre image de base gérée en privé. En savoir plus sur l’utilisation des images publiques.
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
Cette tâche spécifie que tout code temporel est validé dans la branche primaire du dépôt spécifié par --context
et qu’ACR Tasks va générer l’image conteneur à partir du code de cette branche. Le Dockerfile spécifié par --file
à la racine du dépôt est utilisé pour générer l’image. L’argument --image
spécifie une valeur paramétrable de {{.Run.ID}}
pour la partie « version » de la balise de l’image, garantissant ainsi que l’image générée est en corrélation avec une build spécifique et qu’elle est référencée de façon unique.
La sortie d’une commande az acr task create réussie se présente ainsi :
{
"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"
}
Tester la tâche de génération
Vous disposez maintenant d’une tâche qui définit votre build. Pour tester le pipeline de build, déclenchez une génération manuellement en exécutant la commande az acr task run :
az acr task run --registry $ACR_NAME --name taskhelloworld
Par défaut, la commande az acr task run
diffuse en continu la sortie du journal vers votre console lorsque vous exécutez la commande. La sortie est condensée pour montrer les principales étapes.
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
Déclencher une génération avec une validation
Maintenant que vous avez testé la tâche en l’exécutant manuellement, déclenchez-la automatiquement avec une modification du code source.
Vérifiez d’abord que vous êtes dans répertoire contenant votre clone local du dépôt :
cd acr-build-helloworld-node
Exécutez alors les commandes suivantes pour créer, valider et envoyer un nouveau fichier vers votre duplication du référentiel sur GitHub :
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Vous pouvez être invité à fournir vos informations d’identification GitHub lorsque vous exécutez la commande git push
. Indiquez votre nom d’utilisateur GitHub et entrez le jeton d’accès personnel (PAT) que vous avez créé précédemment pour le mot de passe.
Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>
Une fois que vous avez envoyé une validation vers votre référentiel, le webhook créé par ACR Tasks déclenche et démarre une génération dans Azure Container Registry. Affichez les journaux d’activité de la tâche en cours d’exécution pour vérifier et surveiller l’avancement de la génération :
az acr task logs --registry $ACR_NAME
La sortie est similaire à ce qui suit, affichant la tâche en cours d’exécution (ou exécutée en dernier lieu) :
Showing logs of the last created run.
Run ID: ca7
[...]
Run ID: ca7 was successful after 38s
Répertorier les générations
Pour afficher la liste des exécutions de tâche effectuées par ACR Tasks pour votre registre, exécutez la commande az acr task list-runs :
az acr task list-runs --registry $ACR_NAME --output table
La sortie de la commande doit ressembler à ceci : Les exécutions d’ACR Tasks sont affichées, et « Validation Git » s’affiche dans la colonne DÉCLENCHEUR de la dernière tâche :
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
Étapes suivantes
Dans ce didacticiel, vous avez découvert comment utiliser une tâche pour déclencher automatiquement la génération des images de conteneur dans Azure lorsque vous validez le code source dans un référentiel Git. Passez au didacticiel suivant pour découvrir comment créer des tâches qui déclenchent des générations lorsqu’une image de base d’une image conteneur est mise à jour.