Photo par 2H Media

Ajouter des fichiers par défaut aux repositories Azure DevOps avec Terraform

Ajouter des fichiers par défaut obligatoires

Créé par Damien Aicheh le 26/10/2022 · 5 mins

Dans ce tutoriel, nous ajouterons des fichiers par défaut aux repositories que nous avons précédemment créés associés avec notre projet Azure DevOps utilisant Terraform !

Ce tutoriel fait partie d’une série complète de tutoriels sur la configuration d’Azure DevOps à l’aide de Terraform. Vous pouvez télécharger le projet de la partie précédente et suivre.

Ajoutez les fichiers template

Pour les besoins de cet article, nous n’ajouterons que deux fichiers dans un dossier “assets”, donc la structure du projet sera :

| - set_up_azure_devops
   | - assets <---- Here is the folder you needs to add
      | - .gitignore 
      | - azure-pipelines.yml
   | - .env
   | - .gitignore
   | - env.tfvars
   | - project.tf
   | - provider.tf
   | - repos.tf
   | - variables.tf

Vous pouvez donc ajouter un .gitignore avec des valeurs par défaut (ceci est juste pour l’exemple):

.env
.terraform
*.tfstate
**/*.lock.*
**/*.tfplan
terraform.tfplan
terraform.tfstate.backup
plan.out

Et le pipeline Azure DevOps que nous configurerons automatiquement dans le prochain tutoriel :

trigger:
  - main

pool:
  vmImage: ubuntu-latest

steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'

  - script: |
      echo Add other tasks to build, test, and deploy your project.
      echo See https://aka.ms/yaml
    displayName: 'Run a multi-line script'

Comme vous pouvez le constater, il ne s’agit que d’un “Hello World” de base. Bien sûr, si vous savez quel type de projet vous créez, n’hésitez pas à en ajouter un plus spécifique.

Ajouter les fichiers

Ajoutons maintenant les deux fichiers, vous devez d’abord créer un nouveau fichier appelé files.tf. Comme vous pouvez le voir ci-dessous, nous itérons sur la liste des repositories azuredevops_git_repository.this et nous ajoutons les fichiers du dossier assets. Si vos fichiers ne contiennent qu’une ou deux lignes, vous pouvez définir leur contenu directement dans la propriété content.

resource "azuredevops_git_repository_file" "default_pipeline" {
  count               = length(azuredevops_git_repository.this)
  repository_id       = azuredevops_git_repository.this[count.index].id
  file                = "azure-pipelines.yml"
  content             = file("${path.module}/assets/azure-pipelines.yml")
  branch              = "refs/heads/develop"
  commit_message      = "Add azure-pipelines.yml"
  overwrite_on_create = false

  lifecycle {
    ignore_changes = [
      file,
      content,
      commit_message
    ]
  }
}

resource "azuredevops_git_repository_file" "default_gitignore" {
  count               = length(azuredevops_git_repository.this)
  repository_id       = azuredevops_git_repository.this[count.index].id
  file                = ".gitignore"
  content             = file("${path.module}/assets/.gitignore")
  branch              = "refs/heads/develop"
  commit_message      = "Add .gitignore"
  overwrite_on_create = false

  lifecycle {
    ignore_changes = [
      file,
      content,
      commit_message
    ]
  }
}

Vous pouvez trouver toutes les propriétés disponibles dans la documentation de Terraform.

Executer Terraform

Vous pouvez maintenant exécuter la nouvelle commande de planification de Terraform comme ceci :

terraform plan -var-file=env.tfvars --out=plan.out

Et puis appliquez-le plan:

terraform apply plan.out

En conséquence, vous devriez voir un commit pour chaque fichier ajouté à vos référentiels dans Azure DevOps !

Touche finale

Vos repositories sont maintenant correctement initialisés dans Azure DevOps à l’aide de Terraform. Vous trouverez le code source complet dans ce repository Github.

Et après?

Dans le prochain tutoriel de cette série, nous nous concentrerons sur la création automatique d’un pipeline par défaut pour chaque repositories!

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !