Skip to main content

Migration de Jenkins vers GitHub Actions

GitHub Actions et Jenkins partagent plusieurs similitudes, ce qui rend la migration vers GitHub Actions relativement simple.

Remarque

Les exécuteurs hébergés sur GitHub Enterprise Server ne sont pas pris en charge sur GitHub.

Introduction

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

  • Jenkins crée des flux de travail à l’aide de pipelines déclaratifs, qui sont similaires aux GitHub Actions fichiers de flux de travail.
  • 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.
  • 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 ».
  • Les étapes ou les tâches peuvent être réutilisées et partagées avec la communauté.

Pour plus d’informations, consultez « Présentation des 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 flux de travail et des fichiers de configuration. Pour plus d’informations, consultez « Syntaxe de flux de travail 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 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 ».

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 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 » et « 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 flux de travail en sections distinctes. Le tableau ci-dessous compare les sections Jenkins au GitHub Actions flux de travail.

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

Utilisation de 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 correspondent 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
tools
Spécifications des runners hébergés sur GitHub
inputinputs
whenjobs.<job_id>.if

Utilisation de phases séquentielles

Traitement parallèle des travaux

Jenkins peut exécuter stages et steps en parallèle, tandis que GitHub Actions n’exécute actuellement que des tâches en parallèle.

Exécution parallèle dans JenkinsGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matrix

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

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesNone

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

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

Exemples de tâches courantes

Planification d’un pipeline à exécuter avec cron

Pipeline Jenkins avec cron

pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}

GitHub Actions flux de travail avec cron

on:
  schedule:
    - cron: '*/15 * * * 1-5'

Pour plus d’informations sur les événements schedule et la syntaxe cron acceptée, consultez Événements qui déclenchent des flux de travail.

Configuration des variables d’environnement dans un pipeline

Pipeline Jenkins avec une variable d’environnement

pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}

GitHub Actions workflow avec une variable d’environnement

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Construction à partir de projets en amont

Pipeline Jenkins généré à partir d’un projet amont

pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}

GitHub Actions flux de travail qui s’appuie sur un projet en amont

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Construction avec plusieurs systèmes d'exploitation

Pipeline Jenkins généré avec plusieurs systèmes d’exploitation

pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-20" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}

GitHub Actions workflow qui compile sur plusieurs systèmes d’exploitation

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@v6
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp