{"meta":{"title":"Migration de Jenkins vers GitHub Actions","intro":"GitHub Actions et Jenkins partagent plusieurs similitudes, 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-jenkins","title":"Migrer depuis Jenkins"}],"documentType":"article"},"body":"# Migration de Jenkins vers GitHub Actions\n\nGitHub Actions et Jenkins partagent plusieurs similitudes, ce qui rend la migration vers GitHub Actions relativement simple.\n\n## Introduction\n\nJenkins et GitHub Actions les deux vous permettent de créer automatiquement des flux de travail qui créent, testent, publient, publient et déploient du code. Jenkins et GitHub Actions partagez certaines similitudes dans la configuration du flux de travail :\n\n* Jenkins crée des flux de travail à l’aide de *pipelines déclaratifs*, qui sont similaires aux GitHub Actions fichiers de flux de travail.\n* Jenkins utilise des *stages* pour exécuter un ensemble d’étapes, tandis que GitHub Actions utilise des tâches pour regrouper une ou plusieurs étapes ou des commandes individuelles.\n* Jenkins et GitHub Actions prennent en charge les compilations basées sur des conteneurs. Pour plus d’informations, consultez « [Création d’une action de conteneur Docker](/fr/actions/tutorials/use-containerized-services/create-a-docker-container-action) ».\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/get-started/understand-github-actions) ».\n\n## Différences clés\n\n* Jenkins a deux types de syntaxe pour créer des pipelines : pipeline déclaratif et pipeline scripté.\n  GitHub Actions utilise YAML pour créer des flux de travail et des fichiers de configuration. Pour plus d’informations, consultez « [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax) ».\n* Les déploiements Jenkins sont généralement auto-hébergés, avec des utilisateurs qui conservent les serveurs dans leurs propres centres de données.\n  GitHub Actions adopte une approche de cloud hybride en hébergeant ses propres runners, que vous pouvez utiliser pour exécuter des tâches, tout en prenant également en charge les runners autohébergés. Pour plus d’informations, consultez « [Exécuteurs auto-hébergés](/fr/actions/concepts/runners/self-hosted-runners) ».\n\n## Comparaison des fonctionnalités\n\n### Distribution de vos builds\n\nJenkins vous permet d’envoyer des builds à un seul agent de build ou de les répartir entre plusieurs agents. Vous pouvez également classifier ces agents en fonction de différents attributs, tels que les types de systèmes d’exploitation.\n\nDe même, GitHub Actions peut envoyer des tâches à des exécuteurs GitHub hébergés ou auto-hébergés, et vous pouvez utiliser des étiquettes pour classer les exécuteurs selon différents attributs. Pour plus d’informations, consultez « [Présentation des GitHub Actions](/fr/actions/get-started/understand-github-actions#runners) » et « [Exécuteurs auto-hébergés](/fr/actions/concepts/runners/self-hosted-runners) ».\n\n### Utilisation de sections pour organiser les pipelines\n\nJenkins divise ses pipelines déclaratifs en plusieurs sections. De même, GitHub Actions organise ses flux de travail en sections distinctes. Le tableau ci-dessous compare les sections Jenkins au GitHub Actions flux de travail.\n\n| Directives Jenkins                                              | GitHub Actions                                                                                                                                                                                                             |\n| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`agent`](https://jenkins.io/doc/book/pipeline/syntax/#agent)   | [`jobs.<job_id>.runs-on`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontainer) |\n| [`post`](https://jenkins.io/doc/book/pipeline/syntax/#post)     | None                                                                                                                                                                                                                       |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#stages) | [`jobs`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobs)                                                                                                                                                 |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps)                                                                                                                       |\n\n## Utilisation de directives\n\nJenkins utilise des directives pour gérer les *pipelines déclaratifs*. Ces directives définissent les caractéristiques de votre workflow et son exécution. Le tableau ci-dessous montre comment ces directives correspondent aux concepts dans GitHub Actions.\n\n| Directives Jenkins                                                                                                                                 | GitHub Actions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`environment`](https://jenkins.io/doc/book/pipeline/syntax/#environment)                                                                          | [`jobs.<job_id>.env`](/fr/actions/reference/workflows-and-actions/workflow-syntax#env) <br> [`jobs.<job_id>.steps[*].env`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                                  | [`jobs.<job_id>.strategy`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                       |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                               | [`inputs`](/fr/actions/reference/workflows-and-actions/metadata-syntax#inputs) <br> [`outputs`](/fr/actions/reference/workflows-and-actions/metadata-syntax#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                                                | [`on`](/fr/actions/reference/workflows-and-actions/workflow-syntax#on) <br> [`on.<event_name>.types`](/fr/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/fr/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/fr/actions/reference/workflows-and-actions/workflow-syntax#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/fr/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                         | [`jobs.<job_id>.needs`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [Syntaxe cron Jenkins](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)                                                                   | [`on.schedule`](/fr/actions/reference/workflows-and-actions/workflow-syntax#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                                                                                      | [`jobs.<job_id>`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_id) <br> [`jobs.<job_id>.name`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                                                                                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [Spécifications des runners hébergés sur GitHub](/fr/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images) |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                                                                                      | [`inputs`](/fr/actions/reference/workflows-and-actions/metadata-syntax#inputs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                                                                        | [`jobs.<job_id>.if`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n\n## Utilisation de phases séquentielles\n\n### Traitement parallèle des travaux\n\nJenkins peut exécuter `stages` et `steps` en parallèle.\nGitHub Actions exécute des tâches en parallèle et peut également exécuter des étapes en parallèle au sein d’une tâche à l’aide de la syntaxe au niveau des étapes. Pour plus d’informations, consultez [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsbackground).\n\n| Exécution parallèle dans Jenkins                                    | GitHub Actions                                                                                                                      |\n| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel) |\n\n### Matrix\n\nLes deux GitHub Actions et Jenkins vous permettent d’utiliser une matrice pour définir différentes combinaisons système.\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                                                                      |\n| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/fr/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations#about-matrix-strategies) <br> [`context`](/fr/actions/reference/workflows-and-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/fr/actions/reference/workflows-and-actions/contexts#steps-context)                                                                                                               |\n| [`excludes`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages) | None                                                                                                                                                                                                |\n\n### Utilisation des étapes pour exécuter des tâches\n\nJenkins regroupe des `steps` en `stages`. Chacune de ces étapes peut être un script, une fonction ou une commande, entre autres. De même, GitHub Actions utilise `jobs` pour exécuter des groupes spécifiques de `steps`.\n\n| Jenkins                                                       | GitHub Actions                                                                                       |\n| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps) | [`jobs.<job_id>.steps`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps) |\n\n## Exemples de tâches courantes\n\n### Planification d’un pipeline à exécuter avec `cron`\n\n#### Pipeline Jenkins avec `cron`\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n#### GitHub Actions flux de travail avec `cron`\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\nPour plus d’informations sur les événements `schedule` et la syntaxe cron acceptée, consultez [Événements qui déclenchent des flux de travail](/fr/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule).\n\n### Configuration des variables d’environnement dans un pipeline\n\n#### Pipeline Jenkins avec une variable d’environnement\n\n```yaml\npipeline {\n  agent any\n  environment {\n    MAVEN_PATH = '/usr/local/maven'\n  }\n}\n```\n\n#### GitHub Actions workflow avec une variable d’environnement\n\n```yaml\njobs:\n  maven-build:\n    env:\n      MAVEN_PATH: '/usr/local/maven'\n```\n\n### Construction à partir de projets en amont\n\n#### Pipeline Jenkins généré à partir d’un projet amont\n\n```yaml\npipeline {\n  triggers {\n    upstream(\n      upstreamProjects: 'job1,job2',\n      threshold: hudson.model.Result.SUCCESS\n    )\n  }\n}\n```\n\n#### GitHub Actions flux de travail qui s’appuie sur un projet en amont\n\n```yaml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n### Construction avec plusieurs systèmes d'exploitation\n\n#### Pipeline Jenkins généré avec plusieurs systèmes d’exploitation\n\n```yaml\npipeline {\n  agent none\n  stages {\n    stage('Run Tests') {\n      matrix {\n        axes {\n          axis {\n            name: 'PLATFORM'\n            values: 'macos', 'linux'\n          }\n        }\n        agent { label \"${PLATFORM}\" }\n        stages {\n          stage('test') {\n            tools { nodejs \"node-20\" }\n            steps {\n              dir(\"scripts/myapp\") {\n                sh(script: \"npm install -g bats\")\n                sh(script: \"bats tests\")\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n#### GitHub Actions workflow qui compile sur plusieurs systèmes d’exploitation\n\n```yaml\nname: demo-workflow\non:\n  push:\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [macos-latest, ubuntu-latest]\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-node@v7\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}