Exercice - Générer l’image d’application de production
Dans l’exercice précédent, vous avez généré le workflow de préproduction pour générer et publier l’image d’application. Dans cette unité, vous générez un workflow de production qui utilise le déclencheur de version balisée.
Dans cet exercice, vous allez :
- Générer le workflow Actions.
- Créer le déclencheur
on tag
. - Générer et envoyer (push) l’image de production.
- Générer un jeton d’accès personnel (PAT).
- Déclencher l’événement de balisage.
Créer le workflow GitHub Actions
Pour commencer à générer le pipeline, accédez à votre duplication (fork) de l’exemple de dépôt sur le site web GitHub et sélectionnez l’onglet Actions.
Dans le volet gauche, sélectionnez Nouveau workflow.
Dans la page Choisir un workflow, sélectionnez Configurer un workflow vous-même.
Copiez et collez le workflow de base dans le volet d’édition :
# This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch on: push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! # Runs a set of commands using the runners shell - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
Au-dessus du volet d’édition, remplacez le nom du fichier
main.yml
parbuild-production.yml
.Changez la clé
name
deCI
enBuild and push the tagged build to production
.
Créer le déclencheur de balisage
Modifiez les déclencheurs par défaut dans la clé on
.
Supprimez le deuxième déclencheur de façon à ne laisser que les étiquettes
push
.Remplacez la clé
branches
par la clétags
suivante. Cette clé signifie que le workflow s’exécute uniquement sur des balises spécifiques. Dans ce cas, le workflow ne s’exécute que si l’étiquette suit le modèlev*
, qui inclutv1.0.0
.name: Build and push the tagged build to production on: push: tags: - 'v*'
Configurer l’étape d’extraction
Comme dans l’exercice précédent :
- Changez la clé
jobs
deubuntu-latest
enubuntu-20.04
. - Renommez la clé
build
en utilisant le nombuild_push_image
. - Dans la clé
steps
, supprimez les deux derniers exemples d’étape du modèle et conservez l’optioncheckout
.
- Changez la clé
Créez une nouvelle étape qui regroupe les informations de version nécessaires. Vous utilisez la commande interne
::set-output
pour créer cette étape. Ajoutez les lignes suivantes sous l’action Validation :- name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
Votre fichier YAML, sans les commentaires, doit ressembler à l’exemple suivant :
name: Build and push the tagged build to production on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
Ajouter des étapes Docker
Comme pour le workflow intermédiaire, ajoutez les étapesDocker Login
et Build and push Docker images
.
Dans le panneau droit, recherchez Connexion Docker. Sélectionnez le premier résultat publié par Docker.
Sous Installation, sélectionnez l’icône de copie pour copier le YAML d’utilisation.
Collez le code YAML copié sous l’action
Fetch latest version
.Ajoutez les valeurs suivantes aux clés
registry
,username
etpassword
:registry
:${{ secrets.ACR_NAME }}
username
:${{ secrets.ACR_LOGIN }}
password
:${{ secrets.ACR_PASSWORD }}
Supprimez toutes les autres clés, car elles ne sont pas utilisées dans cet exercice.
Dans le volet droit sous Place de marché, recherchez générer et envoyer des images Docker et sélectionnez le premier résultat publié par Docker.
Sous Installation, sélectionnez l’icône de copie pour copier le YAML d’utilisation.
Collez le code YAML copié sous la dernière clé de l’action
docker-login
précédemment copiée.Renommez la clé
name
deBuild and push Docker images
enBuild and push production images
.Ajoutez les valeurs suivantes aux clés
context
,push
ettags
:context
:.
push
:true
tags
:${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }}
Notez que la valeur de la clé
tags
diffère du workflow intermédiaire. L’utilisation desteps.
dans YAML est une pratique courante pour faire référence aux étapes précédentes dans le pipeline. Quand vous avez utiliséset-output
à l’étapefetch_version
, vous avez défini la sortie de l’étape sur la valeur de la variableGITHUB_REF
. Cette sortie est désormais disponible dans le pipeline à l’intérieur de l’objetsteps
.Supprimez toutes les autres clés, car elles ne sont pas utilisées dans cet exercice.
Ajoutez une autre action nommée
docker/setup-buildx-action
entre l’action d’extraction et l’action de connexion, afin de configurer le moteur de génération que Docker doit utiliser. Copiez l’extrait de code suivant et collez-le entre les actionscheckout
etlogin
.- name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0
Votre fichier YAML, sans les commentaires, doit ressembler à l’exemple suivant :
name: Build and push the tagged build to production on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/} - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push production images uses: docker/build-push-action@v5.0.0 with: context: . tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }} push: true
Valider les modifications
Pour valider vos modifications, sélectionnez le bouton Commiter les modifications en bas. Entrez une description du commit, puis sélectionnez Commiter les modifications.
Cette fois, l’action de production ne se déclenche pas, car vous n’avez pas envoyé de nouvelle balise, mais l’action intermédiaire précédente se déclenche et génère une nouvelle image latest
.
Générer un jeton d’accès personnel (PAT)
Vous avez besoin d’un PAT pour envoyer vos balises à l’étape suivante et pour exécuter le script de déploiement lors d’une unité ultérieure.
Accédez à la duplication (fork) de l’exemple de dépôt du site web GitHub. En haut à droite, sélectionnez votre photo de profil, puis Paramètres.
En bas du menu de gauche, sélectionnez Paramètres du développeur.
Sélectionnez Jetons d’accès personnels>Jetons (classique) dans la liste déroulante.
Sélectionnez Générer un jeton d’accès personnel.
Sous Remarque, spécifiez un nom pour votre PAT, tel que myPersonalAccessToken.
Sous Sélectionner des étendues, cochez la case en regard de workflow.
Remarque
L’étendue du flux de travail accorde au référentiel d’administration l’accès aux actions Github. Vous avez besoin de cet accès pour envoyer vos balises à l’étape suivante et pour exécuter le script de déploiement lors d’une unité ultérieure.
Sélectionnez Générer un jeton en bas de la page.
Sélectionnez l’icône de copie pour copier votre PAT. Enregistrez le PAT en vue de son utilisation lors des étapes ultérieures.
Déclencher l’événement de balisage
Dans Azure Cloud Shell, accédez à votre dépôt cloné et exécutez
git pull
.Exécutez la commande suivante :
git tag -a v2.0.0 -m 'My first tag'
Exécutez la commande suivante : À l’invite, indiquez votre PAT comme mot de passe.
git push --tags
Important
Le dépôt d’origine utilise v1.0.0. Vous devez donc envoyer (push) une balise différente, car les doublons ne peuvent pas exister.
Sélectionnez l’onglet Actions et vérifiez le processus en cours d’exécution.
Une fois le processus terminé, exécutez la commande suivante dans Cloud Shell, en remplaçant
<ACR_NAME>
par votreACR_NAME
, afin de vérifier que deux balises figurent dans les résultats.az acr repository show-tags --repository contoso-website --name <ACR_NAME> -o table
Passez à l’unité suivante pour en savoir plus sur l’utilisation de Helm, un outil d’empaquetage pour les applications Kubernetes, afin d’automatiser votre pipeline.