Skip to main content

Migration de Jenkins vers GitHub Actions

GitHub Actions et Jenkins partagent plusieurs similitudes, ce qui facilite grandement la migration vers GitHub Actions.

Remarque : Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server. Vous pouvez voir plus d’informations sur le support futur planifié dans la GitHub public roadmap.

Introduction

Jenkins et GitHub Actions vous permettent tous deux de créer des workflows qui génèrent, testent, publient, libèrent et déploient automatiquement du code. Jenkins et GitHub Actions partagent certaines similitudes dans la configuration de workflow :

  • Jenkins crée des workflows à l’aide de pipelines déclaratifs, qui sont similaires aux fichiers de workflow GitHub Actions.
  • Jenkins utilise des phases pour exécuter une collection d’étapes, tandis que GitHub Actions utilise des travaux pour regrouper une ou plusieurs étapes ou commandes individuelles.
  • Jenkins et GitHub Actions prennent en charge les builds basées sur des conteneurs. Pour plus d’informations, consultez « Création d’une action de conteneur Docker ».
  • Les étapes ou les tâches peuvent être réutilisées et partagées avec la communauté.

Pour plus d’informations, consultez « Concepts de base de GitHub Actions ».

Différences clés

  • Jenkins a deux types de syntaxe pour créer des pipelines : pipeline déclaratif et pipeline scripté. GitHub Actions utilise YAML pour créer des workflows et des fichiers de configuration. Pour plus d’informations, consultez « Syntaxe de workflow pour GitHub Actions ».
  • 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. GitHub Actions offre une approche cloud hybride en hébergeant ses propres exécuteurs que vous pouvez utiliser pour exécuter des travaux, tout en prenant en charge les exécuteurs auto-hébergés. Pour plus d’informations, consultez À propos des exécuteurs auto-hébergés.

Comparaison des fonctionnalités

Distribution de vos builds

Jenkins 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.

De même, GitHub Actions peut envoyer des travaux à des exécuteurs hébergés par GitHub ou auto-hébergés, et vous pouvez utiliser des étiquettes pour classifier les exécuteurs en fonction de différents attributs. Pour plus d’informations, consultez « Présentation de GitHub Actions » et « À propos des exécuteurs auto-hébergés ».

Utilisation de sections pour organiser les pipelines

Jenkins divise ses pipelines déclaratifs en plusieurs sections. De même, GitHub Actions organise ses workflows dans des sections distinctes. Le tableau ci-dessous compare les sections Jenkins au workflow GitHub Actions.

Directives JenkinsGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
post
stagesjobs
stepsjobs.<job_id>.steps

using, directives

Jenkins 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 sont mappées aux concepts dans GitHub Actions.

Directives JenkinsGitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps[*].env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Syntaxe cron Jenkinson.schedule
stagejobs.<job_id>
jobs.<job_id>.name
toolsSpécifications pour les exécuteurs hébergés par GitHub
inputinputs
whenjobs.<job_id>.if

Utilisation de phases séquentielles

Traitement parallèle des travaux

Jenkins peut exécuter les stages et steps en parallèle, tandis que GitHub Actions n’exécute actuellement des travaux qu’en parallèle.

Jenkins parallèleGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matrix

GitHub Actions et Jenkins vous permettent tous deux d’utiliser une matrice pour définir différentes combinaisons de systèmes.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludes

Utilisation des étapes pour exécuter des tâches

Jenkins 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 des jobs pour exécuter des groupes spécifiques d’steps.

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

Exemples de tâches courantes

Planification d’un pipeline à exécuter avec cron

Pipeline Jenkins Workflow GitHub Actions
pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}
on:
  schedule:
    - cron: '*/15 * * * 1-5'

Configuration des variables d’environnement dans un pipeline

Pipeline Jenkins Workflow GitHub Actions
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Génération à partir de projets en amont

Pipeline Jenkins Workflow GitHub Actions
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Génération avec plusieurs systèmes d’exploitation

Pipeline Jenkins Workflow GitHub Actions
pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-12" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}
name: demo-workflow
on:
  push:
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp