[Azure DevOps] Terraform et Azure DevOps CI/CD - Part 2

2 minute(s) de lecture

Après avoir vu dans la première partie comment mettre vos sources et les builds avec Azure DevOps, nous allons maintenant voir comment exécuter ces sources Terraform.

Dans votre portail DevOps, sélectionnez Pipelines > Releases et cliquez sur New pipeline:

Sélectionnez ensuite Empty job:

Renommez votre pipeline, choisissez la source build pipeline et comme version, sélectionnez la dernière, pour notre intégration CI/CD:

Cliquez sur l’éclair et activez le CD (Continuous Deployment):

N’oubliez pas de sauvegarder. Ouvrez maintenant votre Stage 1 et ajoutez les tâches suivantes, en cliquant sur le plus:

  • Azure CLI
  • Azure PowerShell
  • Replace Tokens
  • Run Terraform
  • Run Terraform
  • Run Terraform

Attention, Replace Tokens et Run Terraform doivent être installés depuis le store (gratuit) avant de pouvoir être utilisé.

Nous allons maintenant configurer les étapes. Pour la première étape, Azure CLI, vous pouvez la renommer, et ensuite, ajouter une subscription, avec un compte de type service principal, qui a les droits de faire des déploiements sur la subscription:

Choisissez Inline script et utilisez le script suivant, pour créer le groupe de ressource et le compte de stockage que l’on utilisera pour stocker notre fichier tfstate, qui donne une vue sur le déploiement:

call az group create --location westeurope --name $(terraformstoragerg)

call az storage account create --name $(terraformstorageaccount) --resource-group $(terraformstoragerg) --location westeurope --sku Standard_LRS

call az storage container create --name terraform --account-name $(terraformstorageaccount)

Vous devriez avoir ceci:

Ouvrez la deuxième étape, Azure PowerShell, et donnez lui un nom. Choisissez dans Azure Connection Type => Azure Resource Manager et choisissez la subscription que vous avez créé précédemment. Choisissez ensuite Inline Script et insérez le script suivant, pour récupérer la clé d’accès au compte de stockage:

$key=(Get-AzureRmStorageAccountKey -ResourceGroupName $(terraformstoragerg) -AccountName $(terraformstorageaccount)).Value[0]

Write-Host "##vso[task.setvariable variable=storagekey]$key"

Choisissez la dernière version disponible de PowerShell et sauvegardez. Vous devriez avoir ceci:

Pour la troisème étape, Replace Tokens, modifiez Target files en incluant tous les fichiers .tf, et dans Advanced, modifiez le Token prefix et Token suffix par les __ que l’on avait mis dans notre fichier main.tf ce qui va permettre d’aller récupérer les valeur des variables de la release plutôt que les valeurs du fichier variables.tf. Vous devriez avoir ceci:

Dans la 4ème étape, Run Terraform, fournissez un nom, choisissez le chemin vers le template (l’artifact, créé pendant le build) en cliquant sur … et fournissez ensuite l’argument init. Cochez la case Install terraform avec comme version la dernière disponible et cochez la case pour utiliser le service principal Azure, et choisissez la subscription que l’on a créé précédemment:

Pour la cinquième étape, Run Terraform, c’est la même chose qu’à la quatrième étape, sauf que l’argument est plan au lieu de init:

Pour la dernière étape, c’est pareil que pour l’étape 5, sauf pour l’argument, qui doit être remplacé par -auto-approve:

Sauvegardez. Allez dans l’onglet Variables et cliquez sur Add:

Ajoutez les variables suivantes, avec les valeurs de votre choix:

  • location
  • resource_group
  • terraformstorageaccount
  • terraformstoragerg

Ma subscription est vide, comme vous pouvez le voir ci-dessous:

Pour lancer le déploiement, il suffit par exemple, de modifier le fichier de variable, dans le répertoire. Une fois que vous aurez commit, la build va se lancer (CI) et une fois la build terminé, la release va être créée (CD):

Comme vous pouvez le voir, tout s’est déroulé sans souci. Et sur Azure, j’ai maintenant mes ressources crées:

COmme vous avez pu le remarquer, l’intégration entre Terraform est Azure DevOps est assez simple et fonctionne à merveille. En modifiant un seul fichier dans un répertoire, vous pouvez automatiser toute la chaine de déploiement.

Laisser un commentaire