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.

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 « Creating a Docker container action ».
  • Les étapes ou les tâches peuvent être réutilisées et partagées avec la communauté.

Pour plus d’informations, consultez « Comprendre 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 « Workflow syntax for 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 « Comprendre 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
postNone
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
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 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 avec cron

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

Workflow GitHub Actions avec cron

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

Configuration des variables d’environnement dans un pipeline

Pipeline Jenkins avec une variable d’environnement

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

Workflow GitHub Actions avec une variable d’environnement

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

Génération à 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
    )
  }
}

Workflow GitHub Actions généré à partir d’un projet amont

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

Génération 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-16" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}

Workflow GitHub Actions généré avec 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@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 16
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp