{"meta":{"title":"Migration de Azure Pipelines vers GitHub Actions","intro":"GitHub Actions et Azure Pipelines partagent plusieurs similitudes de configuration, ce qui rend la migration vers GitHub Actions relativement simple.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/tutorials","title":"Tutoriels"},{"href":"/fr/actions/tutorials/migrate-to-github-actions","title":"Migrer vers GitHub Actions"},{"href":"/fr/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"Migrations manuelles"},{"href":"/fr/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-azure-pipelines","title":"Migrer à partir de Azure Pipelines"}],"documentType":"article"},"body":"# Migration de Azure Pipelines vers GitHub Actions\n\nGitHub Actions et Azure Pipelines partagent plusieurs similitudes de configuration, ce qui rend la migration vers GitHub Actions relativement simple.\n\n## Introduction\n\nAzure Pipelines et GitHub Actions vous permettent de créer automatiquement des flux de travail qui créent, testent, publient, publient et déploient du code. Azure Pipelines et GitHub Actions partagent certaines similitudes dans la configuration du flux de travail :\n\n* Les fichiers de configuration de workflow sont écrits en YAML et sont stockés dans le dépôt du code.\n* Les workflows comportent un ou plusieurs travaux.\n* Les travaux incluent une ou plusieurs étapes ou commandes individuelles.\n* Les étapes ou les tâches peuvent être réutilisées et partagées avec la communauté.\n\nPour plus d’informations, consultez « [Présentation des GitHub Actions](/fr/actions/learn-github-actions/understanding-github-actions) ».\n\n## Différences clés\n\nLors de la migration à partir de Azure Pipelines, tenez compte des différences suivantes :\n\n* Azure Pipelines prend en charge un éditeur hérité *classique*, ce qui vous permet de définir votre configuration CI dans un éditeur d’interface graphique utilisateur au lieu de créer la définition de pipeline dans un fichier YAML. GitHub Actions utilise des fichiers YAML pour définir des workflows et ne prend pas en charge un éditeur graphique.\n* Azure Pipelines vous permet d’omettre une structure dans les définitions de travaux. Par exemple, si vous n’avez qu’un seul travail, vous n’avez pas besoin de définir le travail, mais uniquement ses étapes. GitHub Actions nécessite une configuration explicite et la structure YAML ne peut pas être omise.\n* Azure Pipelines prend en charge *stages* définis dans le fichier YAML, qui peut être utilisé pour créer des flux de travail de déploiement. GitHub Actions vous oblige à séparer les phases en fichiers de workflow YAML distincts.\n* Les agents de build sur site Azure Pipelines peuvent être sélectionnés en fonction de leurs fonctions. Les exécuteurs auto-hébergés GitHub Actions peuvent être sélectionnés avec des étiquettes.\n\n## Migration des travaux et des étapes\n\nLes travaux et les étapes de Azure Pipelines sont très similaires aux travaux et aux étapes de GitHub Actions. Dans les deux systèmes, les travaux présentent les caractéristiques suivantes :\n\n* Les travaux contiennent une série d’étapes qui s’exécutent de manière séquentielle.\n* Les travaux s’exécutent sur des machines virtuelles distinctes ou dans des conteneurs distincts.\n* Les travaux s’exécutent en parallèle par défaut, mais peuvent être configurés pour s’exécuter séquentiellement.\n\n## Migration des étapes de script\n\nVous pouvez exécuter un script ou une commande d’environnement en tant qu’étape dans un workflow. Dans Azure Pipelines, les étapes de script peuvent être spécifiées à l’aide de la clé `script` ou avec les clés `bash`, `powershell` ou `pwsh` clés. Les scripts peuvent également être spécifiés en tant qu’entrée de la [tâche Bash](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash?view=azure-devops) ou de la [tâche PowerShell](https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell?view=azure-devops).\n\nDans GitHub Actions, tous les scripts sont spécifiés à l’aide de la clé `run`. Pour sélectionner un shell particulier, vous pouvez spécifier la clé `shell` lors de la fourniture du script. Pour plus d’informations, consultez « [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun) ».\n\nVoici un exemple de syntaxe pour chaque système.\n\n### Syntaxe \"Azure Pipelines\" pour les étapes de script\n\n```yaml\njobs:\n  - job: scripts\n    pool:\n      vmImage: 'windows-latest'\n    steps:\n      - script: echo \"This step runs in the default shell\"\n      - bash: echo \"This step runs in bash\"\n      - pwsh: Write-Host \"This step runs in PowerShell Core\"\n      - task: PowerShell@2\n        inputs:\n          script: Write-Host \"This step runs in PowerShell\"\n```\n\n### Syntaxe GitHub Actions pour les étapes de script\n\n```yaml\njobs:\n  scripts:\n    runs-on: windows-latest\n    steps:\n      - run: echo \"This step runs in the default shell\"\n      - run: echo \"This step runs in bash\"\n        shell: bash\n      - run: Write-Host \"This step runs in PowerShell Core\"\n        shell: pwsh\n      - run: Write-Host \"This step runs in PowerShell\"\n        shell: powershell\n```\n\n## Différences dans la gestion des erreurs de script\n\nDans Azure Pipelines, les scripts peuvent être configurés pour produire une erreur si une sortie est envoyée à `stderr`. GitHub Actions ne prend pas en charge cette configuration.\n\nGitHub Actions configure les shells pour passer en « mode Fail-fast » dans la mesure du possible, ce qui arrête immédiatement le script si l’une des commandes d’un script se termine avec un code d’erreur. En revanche, Azure Pipelines nécessite une configuration explicite pour se terminer immédiatement en cas d'erreur. Pour plus d’informations, consultez « [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference) ».\n\n## Différences dans l’interpréteur de commandes par défaut sur Windows\n\nDans Azure Pipelines, l’interpréteur de commandes par défaut pour les scripts sur les plateformes Windows est l’interpréteur de commandes (*cmd.exe*). Dans GitHub Actions, le shell par défaut pour les scripts sur les plateformes Windows est PowerShell. PowerShell présente plusieurs différences dans les commandes intégrées, l’expansion de variables et le contrôle de flux.\n\nSi vous exécutez une commande simple, vous pouvez exécuter un script d’interface de commande dans PowerShell sans aucune modification. Toutefois, dans la plupart des cas, vous devez mettre à jour votre script avec la syntaxe PowerShell ou demander à GitHub Actions d’exécuter le script avec l’interface de commande au lieu de PowerShell. Pour ce faire, spécifiez `shell` comme `cmd`.\n\nVoici un exemple de syntaxe pour chaque système.\n\n### syntaxe Azure Pipelines à l’aide de CMD par défaut\n\n```yaml\njobs:\n  - job: run_command\n    pool:\n      vmImage: 'windows-latest'\n    steps:\n      - script: echo \"This step runs in CMD on Windows by default\"\n```\n\n### Syntaxe GitHub Actions pour la spécification de CMD\n\n```yaml\njobs:\n  run_command:\n    runs-on: windows-latest\n    steps:\n      - run: echo \"This step runs in PowerShell on Windows by default\"\n      - run: echo \"This step runs in CMD on Windows explicitly\"\n        shell: cmd\n```\n\nPour plus d’informations, consultez « [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/using-workflows/workflow-syntax-for-github-actions#using-a-specific-shell) ».\n\n## Migration des conditions et de la syntaxe des expressions\n\nAzure Pipelines et GitHub Actions peuvent exécuter les deux étapes de manière conditionnelle. Dans Azure Pipelines, les expressions conditionnelles sont spécifiées à l’aide de la clé `condition`. Dans GitHub Actions, les expressions conditionnelles sont spécifiées à l’aide de la clé `if`.\n\nAzure Pipelines utilise des fonctions dans des expressions pour exécuter des étapes conditionnellement. En revanche, GitHub Actions utilise une notation infixe. Par exemple, vous devez remplacer la fonction `eq` dans Azure Pipelines par l’opérateur `==` dans GitHub Actions.\n\nVoici un exemple de syntaxe pour chaque système.\n\n### syntaxe Azure Pipelines pour les expressions conditionnelles\n\n```yaml\njobs:\n  - job: conditional\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - script: echo \"This step runs with str equals 'ABC' and num equals 123\"\n        condition: and(eq(variables.str, 'ABC'), eq(variables.num, 123))\n```\n\n### Syntaxe GitHub Actions pour les expressions conditionnelles\n\n```yaml\njobs:\n  conditional:\n    runs-on: ubuntu-latest\n    steps:\n      - run: echo \"This step runs with str equals 'ABC' and num equals 123\"\n        if: ${{ env.str == 'ABC' && env.num == 123 }}\n```\n\nPour plus d’informations, consultez « [Évaluer des expressions dans les workflows et les actions.](/fr/actions/learn-github-actions/expressions) ».\n\n## Dépendances entre les travaux\n\nLes deux Azure Pipelines et GitHub Actions vous permettent de définir des dépendances pour un travail. Dans les deux systèmes, les travaux s’exécutent en parallèle par défaut, mais les dépendances de travaux peuvent être spécifiées explicitement. Dans Azure Pipelines, cela s’effectue avec la clé `dependsOn`. Dans GitHub Actions, cette opération est effectuée avec la clé `needs`.\n\nVoici un exemple de syntaxe pour chaque système. Les workflows démarrent un premier travail nommé `initial`et, une fois ce travail terminé, deux travaux nommés `fanout1` et `fanout2` s’exécutent. Enfin, une fois ces travaux terminés, le travail `fanin` s’exécute.\n\n### syntaxe Azure Pipelines pour les dépendances entre les tâches\n\n```yaml\njobs:\n  - job: initial\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - script: echo \"This job will be run first.\"\n  - job: fanout1\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: initial\n    steps:\n      - script: echo \"This job will run after the initial job, in parallel with fanout2.\"\n  - job: fanout2\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: initial\n    steps:\n      - script: echo \"This job will run after the initial job, in parallel with fanout1.\"\n  - job: fanin\n    pool:\n      vmImage: 'ubuntu-latest'\n    dependsOn: [fanout1, fanout2]\n    steps:\n      - script: echo \"This job will run after fanout1 and fanout2 have finished.\"\n```\n\n### Syntaxe GitHub Actions pour les dépendances entre les tâches\n\n```yaml\njobs:\n  initial:\n    runs-on: ubuntu-latest\n    steps:\n      - run: echo \"This job will be run first.\"\n  fanout1:\n    runs-on: ubuntu-latest\n    needs: initial\n    steps:\n      - run: echo \"This job will run after the initial job, in parallel with fanout2.\"\n  fanout2:\n    runs-on: ubuntu-latest\n    needs: initial\n    steps:\n      - run: echo \"This job will run after the initial job, in parallel with fanout1.\"\n  fanin:\n    runs-on: ubuntu-latest\n    needs: [fanout1, fanout2]\n    steps:\n      - run: echo \"This job will run after fanout1 and fanout2 have finished.\"\n```\n\nPour plus d’informations, consultez « [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds) ».\n\n## Migration de tâches vers des actions\n\nAzure Pipelines utilise *tasks*, qui sont des composants d’application qui peuvent être réutilisés dans plusieurs flux de travail. GitHub Actions utilise des *actions* qui peuvent être utilisées pour effectuer des tâches et personnaliser votre workflow. Dans les deux systèmes, vous pouvez spécifier le nom de la tâche ou de l’action à exécuter, ainsi que toutes les entrées requises sous forme de paires clé/valeur.\n\nVoici un exemple de syntaxe pour chaque système.\n\n### Syntaxe des tâches pour Azure Pipelines\n\n```yaml\njobs:\n  - job: run_python\n    pool:\n      vmImage: 'ubuntu-latest'\n    steps:\n      - task: UsePythonVersion@0\n        inputs:\n          versionSpec: '3.7'\n          architecture: 'x64'\n      - script: python script.py\n```\n\n### Syntaxe GitHub Actions pour les actions\n\n```yaml\njobs:\n  run_python:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.7'\n          architecture: 'x64'\n      - run: python script.py\n```\n\nVous pouvez trouver des actions que vous pouvez utiliser dans votre workflow dans [GitHub Marketplace](https://github.com/marketplace?type=actions), ou vous pouvez créer vos propres actions. Pour plus d’informations, consultez « [Réutilisation des automatisations](/fr/actions/creating-actions) »."}