Modifier

Partager via


Pipeline CI/CD Gridwich

Microsoft Entra ID
Azure Event Grid
Azure Functions
Azure Key Vault
Azure Pipelines

Gridwich requiert plusieurs ressources dans et en dehors d’Azure pour communiquer entre elles en toute sécurité. Cette exigence pose des problèmes d’intégration continue et de livraison continue (CI/CD) avec les autorisations Microsoft Entra, les barrières, la création de ressources, l’ordre de fonctionnement et le déploiement de fonctions de longue durée. Les principes de guidage suivants répondent à ces défis :

  • Un seul artefact de build affecte tous les environnements dans le même pipeline.
  • Les environnements non contrôlés sont jetables.
  • Terraform crée de manière déclarative des environnements idempotents.
  • Terraform ne met pas le logiciel en production.
  • La création d’infrastructure et la mise en production de logiciel sont des étapes distinctes dans le pipeline.
  • Le pipeline CI/CD n’affecte pas les autorisations Microsoft Entra.
  • Le pipeline considère tout comme du code.
  • Le pipeline utilise des composants réutilisables qui se concentrent sur la composabilité.

Les considérations ci-après sont liées aux principes précédents.

Artefact unique, environnements multiples

Le pipeline Gridwich s’adapte à plusieurs environnements, mais il n’existe qu’un artefact, que le pipeline promeut d’un environnement à l’autre.

Mise en place de logiciels et création d’infrastructure

Dans Gridwich, la version de logiciel et le déploiement d’infrastructure sont deux responsabilités distinctes. Un seul pipeline gère les deux responsabilités à différentes étapes, en utilisant le modèle général suivant :

Builds logicielles > Déploiement d’infrastructure > Version logicielle > Configuration logicielle > Déploiement de script personnalisé

Le principe de la mise en place d’une infrastructure et d’un logiciel à deux responsabilités distinctes complique le déploiement des abonnements Event Grid. Quand Azure crée un abonnement de webhook Event Grid, il envoie un événement de validation pour vérifier si le point de terminaison d’inscription accepte les événements Event Grid. Pour réussir ce contrôle de validation, la fonction Azure doit être mise en production et en cours d’exécution afin que Terraform puisse créer les ressources d’abonnement Event Grid.

Pour résoudre ce problème, il existe deux tâches Terraform dans le pipeline CI/CD :

Diagram showing the Terraform sandwich jobs.

  • Terraform 1 crée toutes les ressources à l’exception des abonnements Azure Event Grid.
  • Terraform 2 crée les abonnements Event Grid une fois que le logiciel est en cours d’exécution.

Étant donné que Terraform ne peut pas exclure un module spécifique, la tâche Terraform 1 doit explicitement cibler tous les modules, à l’exception des abonnements Event Grid. Cette exigence peut être sujette aux erreurs et un signalement GitHub en cours sur Terraform effectue le suivi de ce problème.

Scripts de post-déploiement

Le pipeline CI/CD n’effectue pas d’opérations nécessitant des privilèges élevés, mais utilise des modèles de script d’administration pour générer un ensemble de scripts d’administration en tant qu’artefacts de pipeline. Un administrateur avec des privilèges élevés doit exécuter ces scripts d’administration à chaque fois qu’un nouvel environnement Gridwich est créé. Pour plus d’informations, consultez Exécuter des scripts d’administration Azure.

Les versions de Terraform et de logiciels ne permettent pas de réaliser certaines opérations de Gridwich, notamment :

  • Copie de certificats vers Azure Key Vault
  • Activation de Storage Analytics dans le Stockage Azure

Le script Azure CLI azcli-last-steps-template.yml fournit ces dernières étapes.

Tout en tant que code et réutilisation de code

La réutilisation des composants constituent l’un des avantages de la pratique « tout en tant que code ».

  • Pour Terraform, Gridwich s’appuie fortement sur les modules Terraform pour améliorer la composition et la réutilisation.
  • Pour Azure Pipelines YAML, Gridwich utilise des modèles de pipeline.

Étapes suivantes