Remarque
Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server.
Introduction
GitLab CI/CD 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. GitLab CI/CD et GitHub Actions partagent certaines similitudes dans la configuration de workflow :
- Les fichiers de configuration de workflow sont écrits en YAML et sont stockés dans le dépÎt du code.
- Les workflows comportent un ou plusieurs travaux.
- Les travaux incluent une ou plusieurs étapes ou commandes individuelles.
- Les travaux peuvent sâexĂ©cuter sur des machines gĂ©rĂ©es ou auto-hĂ©bergĂ©es.
Il existe quelques différences, et ce guide vous montre les différences importantes afin que vous puissiez migrer votre workflow vers GitHub Actions.
travaux
Les travaux dans GitLab CI/CD sont trÚs similaires aux travaux dans GitHub Actions. Dans les deux systÚmes, les travaux présentent les caractéristiques suivantes :
- Les travaux contiennent une sĂ©rie dâĂ©tapes ou de scripts qui sâexĂ©cutent de maniĂšre sĂ©quentielle.
- Les travaux peuvent sâexĂ©cuter sur des machines distinctes ou dans des conteneurs distincts.
- Les travaux sâexĂ©cutent en parallĂšle par dĂ©faut, mais peuvent ĂȘtre configurĂ©s pour sâexĂ©cuter sĂ©quentiellement.
Vous pouvez exĂ©cuter un script ou une commande dâenvironnement dans un travail. Dans GitLab CI/CD, les Ă©tapes de script sont spĂ©cifiĂ©es Ă lâaide de la clĂ© script
. Dans GitHub Actions, tous les scripts sont spĂ©cifiĂ©s Ă lâaide de la clĂ© run
.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les travaux
job1:
variables:
GIT_CHECKOUT: "true"
script:
- echo "Run your script here"
Syntaxe GitHub Actions pour les travaux
jobs:
job1:
steps:
- uses: actions/checkout@v5
- run: echo "Run your script here"
Exécuteurs
Les exĂ©cuteurs sont des ordinateurs sur lesquels les travaux sâexĂ©cutent. GitLab CI/CD et GitHub Actions offrent des variantes managĂ©es et auto-hĂ©bergĂ©es des exĂ©cuteurs. Dans GitLab CI/CD, des tags
sont utilisées pour exécuter des travaux sur différentes plateformes, tandis que dans GitHub Actions, cette opération est effectuée avec la clé runs-on
.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les exécuteurs
windows_job:
tags:
- windows
script:
- echo Hello, %USERNAME%!
linux_job:
tags:
- linux
script:
- echo "Hello, $USER!"
Syntaxe GitHub Actions pour les exécuteurs
windows_job:
runs-on: windows-latest
steps:
- run: echo Hello, %USERNAME%!
linux_job:
runs-on: ubuntu-latest
steps:
- run: echo "Hello, $USER!"
Pour plus dâinformations, consultez « Workflow syntax for GitHub Actions ».
docker images
GitLab CI/CD et GitHub Actions prennent en charge lâexĂ©cution de travaux dans une image Docker. Dans GitLab CI/CD, les images Docker sont dĂ©finies avec une clĂ© image
, tandis que dans GitHub Actions, cette opération est effectuée avec la clé container
.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les images Docker
my_job:
image: node:20-bookworm-slim
Syntaxe GitHub Actions pour les images Docker
jobs:
my_job:
container: node:20-bookworm-slim
Pour plus dâinformations, consultez « Workflow syntax for GitHub Actions ».
Syntaxe de condition et dâexpression
GitLab CI/CD utilise des rules
pour dĂ©terminer si un travail sâexĂ©cutera pour une condition spĂ©cifique. GitHub Actions utilise le mot clĂ© if
pour empĂȘcher lâexĂ©cution dâun travail, sauf si une condition est remplie.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les conditions et expressions
deploy_prod:
stage: deploy
script:
- echo "Deploy to production server"
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
Syntaxe GitHub Actions pour les conditions et expressions
jobs:
deploy_prod:
if: contains( github.ref, 'master')
runs-on: ubuntu-latest
steps:
- run: echo "Deploy to production server"
Pour plus dâinformations, consultez « Ăvaluer les expressions dans les workflows et les actions ».
Dépendances entre les travaux
GitLab CI/CD et GitHub Actions vous permettent de dĂ©finir des dĂ©pendances pour un travail. Dans les deux systĂšmes, les travaux sâexĂ©cutent en parallĂšle par dĂ©faut, mais les dĂ©pendances de travaux dans GitHub Actions peuvent ĂȘtre spĂ©cifiĂ©es explicitement avec la clĂ© needs
. GitLab CI/CD a également un concept de stages
, oĂč les travaux dâune phase sâexĂ©cutent simultanĂ©ment, mais la phase suivante commence lorsque tous les travaux de la phase prĂ©cĂ©dente sont terminĂ©s. Vous pouvez recrĂ©er ce scĂ©nario dans GitHub Actions avec la clĂ© needs
.
Voici un exemple de syntaxe pour chaque systÚme. Les workflows commencent avec deux travaux nommés build_a
et build_b
exécutés en parallÚle et, une fois ces travaux terminés, un autre travail appelé test_ab
sâexĂ©cute. Enfin, une fois test_ab
terminé, le travail deploy_ab
sâexĂ©cute.
Syntaxe CI/CD GitLab pour les dépendances entre les travaux
stages:
- build
- test
- deploy
build_a:
stage: build
script:
- echo "This job will run first."
build_b:
stage: build
script:
- echo "This job will run first, in parallel with build_a."
test_ab:
stage: test
script:
- echo "This job will run after build_a and build_b have finished."
deploy_ab:
stage: deploy
script:
- echo "This job will run after test_ab is complete"
Syntaxe GitHub Actions pour les dépendances entre les travaux
jobs:
build_a:
runs-on: ubuntu-latest
steps:
- run: echo "This job will be run first."
build_b:
runs-on: ubuntu-latest
steps:
- run: echo "This job will be run first, in parallel with build_a"
test_ab:
runs-on: ubuntu-latest
needs: [build_a,build_b]
steps:
- run: echo "This job will run after build_a and build_b have finished"
deploy_ab:
runs-on: ubuntu-latest
needs: [test_ab]
steps:
- run: echo "This job will run after test_ab is complete"
Pour plus dâinformations, consultez « Workflow syntax for GitHub Actions ».
Planification des workflows
GitLab CI/CD et GitHub Actions vous permettent dâexĂ©cuter des workflows Ă un intervalle spĂ©cifique. Dans GitLab CI/CD, les planifications de pipelines sont configurĂ©es avec lâinterface utilisateur, tandis que dans GitHub Actions, vous pouvez dĂ©clencher un workflow selon un intervalle planifiĂ© avec la clĂ© « on ».
Pour plus dâinformations, consultez « ĂvĂ©nements qui dĂ©clenchent des flux de travail ».
Variables et secrets
GitLab CI/CD et GitHub Actions permettent de définir des variables dans le fichier de configuration du pipeline ou du flux de travail, et de créer des secrets à l'aide de l'interface utilisateur de GitLab ou de GitHub. UI.
Pour plus dâinformations, consultez « Stocker des informations dans des variables » et « Secrets ».
Mise en cache
GitLab CI/CD et GitHub Actions fournissent une méthode dans le fichier de configuration pour mettre manuellement en cache les fichiers de workflow.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour la mise en cache
image: node:latest
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- .npm/
before_script:
- npm ci --cache .npm --prefer-offline
test_async:
script:
- node ./specs/start.js ./specs/async.spec.js
Syntaxe GitHub Actions pour la mise en cache
jobs:
test_async:
runs-on: ubuntu-latest
steps:
- name: Cache node modules
uses: actions/cache@v4
with:
path: ~/.npm
key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
restore-keys: v1-npm-deps-
Artifacts
GitLab CI/CD et GitHub Actions peuvent charger des fichiers et des rĂ©pertoires créés par un travail en tant quâartefacts. Dans GitHub Actions, les artefacts peuvent ĂȘtre utilisĂ©s pour conserver des donnĂ©es entre plusieurs travaux.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les artefacts
script:
artifacts:
paths:
- math-homework.txt
Syntaxe GitHub Actions pour les artefacts
- name: Upload math result for job 1
uses: actions/upload-artifact@v3
with:
name: homework
path: math-homework.txt
Pour plus dâinformations, consultez « Stocker et partager des donnĂ©es avec les artefacts de workflow ».
Bases de données et conteneurs de service
Les deux systĂšmes vous permettent dâinclure des conteneurs supplĂ©mentaires pour les bases de donnĂ©es, la mise en cache ou dâautres dĂ©pendances.
Dans GitLab CI/CD, un conteneur pour le travail est spécifié avec la clé image
, tandis que GitHub Actions utilise la clé container
. Dans les deux systÚmes, des conteneurs de service supplémentaires sont spécifiés avec la clé services
.
Voici un exemple de syntaxe pour chaque systĂšme.
Syntaxe CI/CD GitLab pour les bases de données et les conteneurs de service
container-job:
variables:
POSTGRES_PASSWORD: postgres
# The hostname used to communicate with the
# PostgreSQL service container
POSTGRES_HOST: postgres
# The default PostgreSQL port
POSTGRES_PORT: 5432
image: node:20-bookworm-slim
services:
- postgres
script:
# Performs a clean installation of all dependencies
# in the `package.json` file
- npm ci
# Runs a script that creates a PostgreSQL client,
# populates the client with data, and retrieves data
- node client.js
tags:
- docker
Syntaxe GitHub Actions pour les bases de données et les conteneurs de service
jobs:
container-job:
runs-on: ubuntu-latest
container: node:20-bookworm-slim
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
steps:
- name: Check out repository code
uses: actions/checkout@v5
# Performs a clean installation of all dependencies
# in the `package.json` file
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# Runs a script that creates a PostgreSQL client,
# populates the client with data, and retrieves data
run: node client.js
env:
# The hostname used to communicate with the
# PostgreSQL service container
POSTGRES_HOST: postgres
# The default PostgreSQL port
POSTGRES_PORT: 5432
Pour plus dâinformations, consultez « Communication avec les conteneurs de service Docker ».