Skip to main content

Migration de Travis CI vers GitHub Actions

GitHub Actions et Travis CI partagent plusieurs similitudes, ce qui facilite grandement la migration vers GitHub Actions.

Introduction

Ce guide vous aide à migrer de Travis CI vers GitHub Actions. Il compare leurs concepts et leur syntaxe, décrit les similitudes et illustre leurs différentes approches des tâches courantes.

Avant de commencer

Avant de commencer votre migration vers GitHub Actions, il est utile de vous familiariser avec son fonctionnement :

Comparaison de l’exécution des travaux

Pour vous permettre de contrôler quand des tâches CI sont exécutées, un workflow GitHub Actions utilise des travaux qui s’exécutent en parallèle par défaut. Chaque travail contient des étapes exécutées dans une séquence que vous définissez. Si vous devez exécuter des actions d’installation et de nettoyage pour un travail, vous pouvez définir des étapes dans chaque travail pour effectuer ces opérations.

Similitudes clés

GitHub Actions et Travis CI partagent certaines similitudes, et la compréhension de celles-ci à l’avance peut faciliter le processus de migration.

Utilisation de la syntaxe YAML

Travis CI et GitHub Actions utilisent tous deux YAML pour créer des travaux et des workflows, et ces fichiers sont stockés dans le dépôt du code. Pour plus d’informations sur la façon dont GitHub Actions utilise YAML, consultez « Comprendre GitHub Actions ».

Variables personnalisées

Travis CI vous permet de définir des variables et de les partager entre les phases. De même, GitHub Actions vous permet de définir des variables pour un workflow. Pour plus d’informations, consultez « Variables ».

Les variables par défaut

Travis CI et GitHub Actions incluent les variables d’environnement par défaut que vous pouvez utiliser dans vos fichiers YAML. Pour GitHub Actions, vous pouvez les voir répertoriées dans « Variables ».

Traitement parallèle des travaux

Travis CI peut utiliser des stages pour exécuter des travaux en parallèle. De même, GitHub Actions exécute des jobs en parallèle. Pour plus d’informations, consultez « À propos des workflows ».

Badges d’état

Travis CI et GitHub Actions prennent en charge les badges d’état, qui vous permettent d’indiquer si une build réussit ou échoue. Pour plus d’informations, consultez « Adding a workflow status badge ».

Utilisation d’une matrice

Travis CI et GitHub Actions prennent en charge une matrice, ce qui vous permet d’effectuer des tests à l’aide de combinaisons de systèmes d’exploitation et de packages logiciels. Pour plus d’informations, consultez « Utilisation d’une matrice pour vos travaux ».

Voici un exemple qui compare la syntaxe pour chaque système.

Syntaxe Travis CI pour une matrice

matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'

Syntaxe GitHub Actions pour une matrice

jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']

Ciblage de branches spécifiques

Travis CI et GitHub Actions vous permettent de cibler votre CI vers une branche spécifique. Pour plus d’informations, consultez « Workflow syntax for GitHub Actions ».

Voici un exemple de syntaxe pour chaque système.

Syntaxe Travis CI pour cibler des branches spécifiques

branches:
  only:
    - main
    - 'mona/octocat'

Syntaxe GitHub Actions pour cibler des branches spécifiques

on:
  push:
    branches:
      - main
      - 'mona/octocat'

Extraction de sous-modules

Travis CI et GitHub Actions vous permettent de contrôler si les sous-modules sont inclus dans le clone du dépôt.

Voici un exemple de syntaxe pour chaque système.

Syntaxe Travis CI pour l’extraction des sous-modules

git:
  submodules: false

Syntaxe GitHub Actions pour l’extraction des sous-modules

- uses: actions/checkout@v4
  with:
    submodules: false

Utilisation de variables d’environnement dans une matrice

Travis CI et GitHub Actions peuvent ajouter des variables personnalisées à une matrice de test, ce qui vous permet de faire référence à la variable lors d’une étape ultérieure.

Dans GitHub Actions, vous pouvez utiliser la clé include pour ajouter des variables d’environnement personnalisées à une matrice. Dans cet exemple, les entrées de matrice pour node-version sont configurées pour utiliser des valeurs différentes pour les variables d’environnement site et datacenter. L’étape Echo site details utilise ensuite env: ${{ matrix.env }} pour faire référence aux variables personnalisées :

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: '14.x'
           site: "prod"
           datacenter: "site-a"
         - node-version: '16.x'
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER

Fonctionnalités clés dans GitHub Actions

Lors de la migration à partir de Travis CI, tenez compte des fonctionnalités clés suivantes dans GitHub Actions :

Stockage des secrets

GitHub Actions vous permet de stocker des secrets et de les référencer dans vos travaux. Les organisations GitHub Actions peuvent limiter les dépôts pouvant accéder aux secrets de l’organisation. Les règles de protection du déploiement peuvent nécessiter une approbation manuelle pour qu’un flux de travail accède aux secrets de l’environnement. Pour plus d’informations, consultez « Utilisation de secrets dans GitHub Actions ».

Partage de fichiers entre des travaux et des workflows

GitHub Actions inclut la prise en charge intégrée du stockage d’artefacts, ce qui vous permet de partager des fichiers entre des travaux dans un workflow. Vous pouvez également enregistrer les fichiers résultants et les partager avec d’autres workflows. Pour plus d’informations, consultez « Essential features of GitHub Actions ».

Hébergement de vos propres exécuteurs

Si vos travaux nécessitent un matériel ou un logiciel spécifique, GitHub Actions vous permet d’héberger vos propres exécuteurs et de leur envoyer vos travaux pour traitement. GitHub Actions vous permet également d’utiliser des stratégies pour contrôler l’accès à ces exécuteurs, en accordant l’accès au niveau de l’organisation ou du dépôt. Pour plus d’informations, consultez « Hébergement de vos propres exécuteurs ».

Travaux simultanés et durée d’exécution

Les travaux simultanés et les durées d’exécution des workflows dans GitHub Actions peuvent varier selon votre plan GitHub. Pour plus d’informations, consultez « Limites d’utilisation, facturation et administration ».

Utilisation de différents langages dans GitHub Actions

Lorsque vous utilisez différents langages dans GitHub Actions, vous pouvez créer une étape dans votre travail pour configurer vos dépendances de langages. Pour plus d’informations sur l’utilisation d’un langage particulier, consultez le guide spécifique :

Exécution des scripts

GitHub Actions peut utiliser des étapes run pour exécuter des scripts ou des commandes d’environnement. Pour utiliser un shell particulier, vous pouvez spécifier le type shell lors de la fourniture du chemin au script. Pour plus d’informations, consultez « Workflow syntax for GitHub Actions ».

Par exemple :

steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash

Gestion des erreurs dans GitHub Actions

Lors de la migration vers GitHub Actions, il existe différentes approches de la gestion des erreurs que vous devrez peut-être connaître.

Gestion des erreurs de script

GitHub Actions arrête immédiatement un travail si l’une des étapes retourne un code d’erreur. Pour plus d’informations, consultez « Workflow syntax for GitHub Actions ».

Gestion des erreurs de travail

GitHub Actions utilise des conditions if pour exécuter des travaux ou des étapes dans certaines situations. Par exemple, vous pouvez exécuter une étape quand une autre étape entraîne un failure(). Pour plus d’informations, consultez « Workflow syntax for GitHub Actions ». Vous pouvez également utiliser continue-on-error pour empêcher l’arrêt de l’exécution d’un workflow quand un travail échoue.

Migration de la syntaxe pour les expressions et les conditions

Pour exécuter des travaux sous des expressions conditionnelles, Travis CI et GitHub Actions partagent une syntaxe de condition if similaire. GitHub Actions vous permet d’utiliser la condition if pour empêcher l’exécution d’un travail ou d’une étape, sauf si une condition est remplie. Pour plus d’informations, consultez « Expressions ».

Cet exemple montre comment une condition if peut contrôler si une étape est exécutée :

jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123

Migration de phases vers des étapes

Là où Travis CI utilise des phases pour exécuter des étapes, GitHub Actions a des étapes qui exécutent des actions. Vous pouvez trouver des actions prédéfinies dans la GitHub Marketplace, ou vous pouvez créer vos propres actions. Pour plus d’informations, consultez « Création d’actions ».

Voici un exemple de syntaxe pour chaque système.

Syntaxe Travis CI pour les phases et les étapes

language: python
python:
  - "3.7"

script:
  - python script.py

Syntaxe GitHub Actions pour les phases et les étapes

jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v4
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Mise en cache des dépendances

Travis CI et GitHub Actions vous permettent de mettre manuellement en cache les dépendances pour une réutilisation ultérieure.

Ces exemples illustrent la syntaxe du cache pour chaque système.

Syntaxe Travis CI pour la mise en cache

language: node_js
cache: npm

Syntaxe GitHub Actions pour la mise en cache

- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

Exemples de tâches courantes

Cette section compare la façon dont GitHub Actions et Travis CI effectuent des tâches courantes.

Configuration des variables d’environnement

Vous pouvez créer des variables d’environnement personnalisées dans un travail GitHub Actions.

Syntaxe Travis CI pour une variable d’environnement

env:
  - 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 avec Node.js

Travis CI pour générer avec Node.js

install:
  - npm install
script:
  - npm run build
  - npm test

Workflow GitHub Actions pour générer avec Node.js

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test

Étapes suivantes

Pour continuer à découvrir les principales fonctionnalités de GitHub Actions, consultez « Découvrir GitHub Actions ».