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 Jenkins | GitHub Actions |
|---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | None |
stages | jobs |
steps | jobs.<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.
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 Jenkins | GitHub Actions |
|---|---|
parallel | jobs.<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.
| Jenkins | GitHub Actions |
|---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes | None |
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.
| Jenkins | GitHub Actions |
|---|---|
steps | jobs.<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