Qu'est-ce que CI/CD ?
L'Intégration Continue (CI) et le Déploiement Continu (CD) sont des pratiques qui automatisent la construction, les tests et le déploiement des applications. Azure Pipelines fournit une plateforme puissante et flexible pour mettre en œuvre CI/CD pour toute stack technologique, y compris les solutions Dynamics 365 et Power Platform. Azure Pipelines.
Avantages du CI/CD
- Livraison plus rapide : Automatiser les tâches répétitives
- Meilleure qualité : Détecter les problèmes tôt avec les tests automatisés
- Risque réduit : Changements plus petits et incrémentaux
- Cohérence : Même processus à chaque déploiement
- Traçabilité : Lier les déploiements aux changements de code
Vue d'ensemble d'Azure pipelines
Types de pipeline
- Pipelines YAML : Pipeline-as-code, versionné, approche recommandée
- Pipelines classiques : Concepteur visuel, configuration basée sur l'UI
Concepts clés
- Trigger : Ce qui démarre le pipeline (commit, planning, manuel)
- Stage : Division logique (Build, Test, Deploy)
- Job : Unité de travail s'exécutant sur un agent
- Step : Tâche ou script individuel
- Agent : Machine qui exécute le pipeline
Bases des Pipelines YAML
Pipeline de build simple
# azure-pipelines.yml
trigger:
branches:
include:
- main
- develop
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
stages:
- stage: Build
displayName: 'Build Stage'
jobs:
- job: BuildJob
displayName: 'Build Solution'
steps:
- task: NuGetToolInstaller@1
displayName: 'Install NuGet'
- task: NuGetCommand@2
displayName: 'Restore NuGet Packages'
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
displayName: 'Run Unit Tests'
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifacts'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'Pipeline CI/CD Dynamics 365
Power Platform Build Tools
Microsoft fournit les Power Platform Build Tools pour Azure DevOps pour automatiser la gestion des solutions :
# Dynamics 365 Solution Pipeline
trigger:
branches:
include:
- main
pool:
vmImage: 'windows-latest'
variables:
SolutionName: 'MySolution'
ServiceConnection: 'PowerPlatform-Dev'
stages:
- stage: Export
displayName: 'Export from Dev'
jobs:
- job: ExportSolution
steps:
- task: PowerPlatformToolInstaller@2
displayName: 'Install Power Platform Tools'
- task: PowerPlatformExportSolution@2
displayName: 'Export Unmanaged Solution'
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: '$(ServiceConnection)'
SolutionName: '$(SolutionName)'
SolutionOutputFile: '$(Build.ArtifactStagingDirectory)/$(SolutionName).zip'
Managed: false
- task: PowerPlatformUnpackSolution@2
displayName: 'Unpack Solution'
inputs:
SolutionInputFile: '$(Build.ArtifactStagingDirectory)/$(SolutionName).zip'
SolutionTargetFolder: '$(Build.SourcesDirectory)/solutions/$(SolutionName)'
SolutionType: 'Both'
- task: PublishBuildArtifacts@1
displayName: 'Publish Solution Artifact'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'solution'
- stage: Build
displayName: 'Build Managed Solution'
dependsOn: Export
jobs:
- job: PackSolution
steps:
- task: PowerPlatformToolInstaller@2
- task: DownloadBuildArtifacts@1
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: 'solution'
- task: PowerPlatformPackSolution@2
displayName: 'Pack as Managed'
inputs:
SolutionSourceFolder: '$(Build.SourcesDirectory)/solutions/$(SolutionName)'
SolutionOutputFile: '$(Build.ArtifactStagingDirectory)/$(SolutionName)_managed.zip'
SolutionType: 'Managed'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'managed-solution'Pipeline de déploiement
- stage: DeployTest
displayName: 'Deploy to Test'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeployToTest
displayName: 'Deploy to Test Environment'
environment: 'Test'
strategy:
runOnce:
deploy:
steps:
- task: PowerPlatformToolInstaller@2
- task: PowerPlatformImportSolution@2
displayName: 'Import Solution'
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'PowerPlatform-Test'
SolutionInputFile: '$(Pipeline.Workspace)/managed-solution/$(SolutionName)_managed.zip'
AsyncOperation: true
MaxAsyncWaitTime: '60'
- task: PowerPlatformPublishCustomizations@2
displayName: 'Publish Customizations'
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'PowerPlatform-Test'
- stage: DeployProd
displayName: 'Deploy to Production'
dependsOn: DeployTest
condition: succeeded()
jobs:
- deployment: DeployToProd
displayName: 'Deploy to Production'
environment: 'Production'
strategy:
runOnce:
deploy:
steps:
- task: PowerPlatformToolInstaller@2
- task: PowerPlatformImportSolution@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'PowerPlatform-Prod'
SolutionInputFile: '$(Pipeline.Workspace)/managed-solution/$(SolutionName)_managed.zip'
AsyncOperation: true
MaxAsyncWaitTime: '120'Connexions de service
Principal de Service Power Platform
Configurer les connexions de service pour les déploiements automatisés :
- Créer l'enregistrement d'application Microsoft Entra ID
- Accorder les permissions API Dataverse
- Créer l'utilisateur d'application dans le Centre d'administration Power Platform
- Assigner les rôles de sécurité appropriés
- Créer la connexion de service dans les paramètres du projet Azure DevOps
Approbations et portes d'environnement
Approbations manuelles
Configurer les portes d'approbation pour les déploiements en production :
- Définir les approbateurs pour chaque environnement
- Définir le timeout et les politiques d'approbation
- Exiger plusieurs approbateurs pour les environnements critiques
- Notifications par e-mail pour les approbations en attente
Portes automatisées
- Alertes Azure Monitor : Vérifier les incidents actifs
- Requêtes d'éléments de travail : S'assurer que tous les bugs sont résolus
- Appels API REST : Points de terminaison de validation personnalisés
- Conformité Azure Policy : Vérifications de sécurité
Variables et secrets
Groupes de variables
Organiser les variables par environnement :
variables: - group: 'PowerPlatform-Dev-Variables' - group: 'Common-Variables' - name: localVariable value: 'someValue'
Intégration Azure Key Vault
Lier les groupes de variables à Azure Key Vault pour une gestion sécurisée des secrets :
- Stocker les chaînes de connexion et clés API dans Key Vault
- Créer un groupe de variables lié à Key Vault
- Secrets automatiquement récupérés à l'exécution
- Auditer l'accès via les logs Key Vault
Tests dans les pipelines
Tests unitaires
- task: VSTest@2
displayName: 'Run Unit Tests'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**/*Tests.dll
!**/obj/**
searchFolder: '$(System.DefaultWorkingDirectory)'
codeCoverageEnabled: true
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'Solution Checker
Exécuter l'analyse statique sur les solutions Power Platform :
- task: PowerPlatformChecker@2
displayName: 'Run Solution Checker'
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: '$(ServiceConnection)'
FilesToAnalyze: '$(Build.ArtifactStagingDirectory)/*.zip'
RuleSet: 'Solution Checker'Bonnes pratiques
Conception du pipeline
- Utiliser les pipelines YAML pour le contrôle de version
- Garder les pipelines DRY avec des templates
- Mettre en œuvre des noms de stage/job significatifs
- Ajouter des valeurs de timeout appropriées
- Utiliser des conditions pour contrôler le flux d'exécution
Sécurité
- Ne jamais stocker de secrets dans les fichiers YAML
- Utiliser des principaux de service avec permissions minimales
- Activer les politiques de branche pour les changements de pipeline
- Examiner les exécutions de pipeline pour un comportement inattendu
- Faire tourner les identifiants régulièrement
Performance
- Mettre en cache les dépendances entre les exécutions
- Paralléliser les jobs indépendants
- Utiliser des tailles d'agent appropriées
- Sauter les étapes inutiles avec des conditions
- Archiver les artefacts sélectivement
Conclusion
Azure Pipelines fournit une plateforme robuste pour mettre en œuvre CI/CD pour les solutions Dynamics 365 et Power Platform. En automatisant le processus de build, test et déploiement, les équipes peuvent livrer des changements plus rapidement avec plus de confiance. Commencez avec un pipeline simple et ajoutez progressivement des stages, tests et approbations à mesure que votre processus mûrit.