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 « 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 Jenkins | GitHub Actions |
---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | None |
stages | jobs |
steps | jobs.<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.
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èle | GitHub Actions |
---|---|
parallel | jobs.<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.
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 des jobs
pour exécuter des groupes spécifiques d’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')
}
}
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