Skip to main content

Cette version de GitHub Enterprise Server n'est plus disponible depuis le 2025-04-03. Aucune publication de correctifs n’est effectuĂ©e, mĂȘme pour les problĂšmes de sĂ©curitĂ© critiques. Pour de meilleures performances, une sĂ©curitĂ© amĂ©liorĂ©e et de nouvelles fonctionnalitĂ©s, effectuez une mise Ă  niveau vers la derniĂšre version de GitHub Enterprise. Pour obtenir de l’aide sur la mise Ă  niveau, contactez le support GitHub Enterprise.

Migration de CircleCI vers GitHub Actions

GitHub Actions et CircleCI partagent plusieurs similitudes de configuration, ce qui facilite grandement la migration vers GitHub Actions.

Note

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

CircleCI 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. CircleCI et GitHub Actions partagent certaines similitudes dans la configuration de workflow :

  • Les fichiers de configuration de workflow sont Ă©crits en YAML et stockĂ©s dans le dĂ©pĂŽt.
  • Les workflows comportent un ou plusieurs travaux.
  • Les travaux incluent une ou plusieurs Ă©tapes ou commandes individuelles.
  • 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

Lors de la migration Ă  partir de CircleCI, tenez compte des diffĂ©rences suivantes :

  • Le parallĂ©lisme de test automatique de CircleCI regroupe automatiquement les tests en fonction des rĂšgles spĂ©cifiĂ©es par l’utilisateur ou des informations de durĂ©e d’historique. Cette fonctionnalitĂ© n’est pas intĂ©grĂ©e Ă  GitHub Actions.
  • Les actions qui s’exĂ©cutent dans des conteneurs Docker sont sensibles aux problĂšmes d’autorisations, car les conteneurs ont un mappage diffĂ©rent des utilisateurs. Vous pouvez Ă©viter un grand nombre de ces problĂšmes en n’utilisant pas l’instruction USER dans votre Dockerfile. Pour plus d'informations sur le systĂšme de fichiers Docker sur les exĂ©cuteurs hĂ©bergĂ©s par GitHub, voir Utilisation des exĂ©cuteurs hĂ©bergĂ©s par GitHub.

Migration de workflows et de travaux

CircleCI définit workflows dans le fichier config.yml, ce qui vous permet de configurer plusieurs workflows. GitHub nécessite un fichier de flux de travail par flux de travail et, par conséquent, ne vous oblige pas à déclarer workflows. Vous devez créer un fichier de workflow pour chaque workflow configuré dans config.yml.

CircleCI et GitHub Actions configurent jobs dans le fichier de configuration Ă  l’aide d’une syntaxe similaire. Si vous configurez des dĂ©pendances entre les travaux avec requires dans votre workflow CircleCI, vous pouvez utiliser la syntaxe needs GitHub Actions Ă©quivalente. Pour plus d’informations, consultez « Workflow syntax for GitHub Actions Â».

Migration d’orbs vers des actions

CircleCI et GitHub Actions fournissent un mĂ©canisme permettant de rĂ©utiliser et de partager des tĂąches dans un workflow. CircleCI utilise un concept appelĂ© orbs, Ă©crits en YAML, pour fournir des tĂąches que les utilisateurs peuvent rĂ©utiliser dans un workflow. GitHub Actions a des composants rĂ©utilisables puissants et flexibles appelĂ©s actions, que vous gĂ©nĂ©rez avec des fichiers JavaScript ou des images Docker. Vous pouvez crĂ©er des actions en Ă©crivant un code personnalisĂ© qui interagit avec votre rĂ©fĂ©rentiel de la maniĂšre que vous souhaitez, y compris en intĂ©grant les API de GitHub et toute API tierce publiquement disponible. Par exemple, une action peut publier des modules npm, envoyer des alertes par SMS lors de la crĂ©ation de problĂšmes urgents ou dĂ©ployer du code prĂȘt pour la production. Pour plus d’informations, consultez « Partage des automatisations Â».

CircleCI peut rĂ©utiliser des Ă©lĂ©ments de workflows avec des ancres et des alias YAML. GitHub Actions prend en charge le besoin le plus courant de rĂ©utilisation Ă  l’aide de matrices. Pour plus d’informations sur les matrices, consultez « ExĂ©cution de variantes de tĂąches dans un workflow Â».

Utilisation des images Docker

CircleCI et GitHub Actions prennent en charge l’exĂ©cution des Ă©tapes Ă  l’intĂ©rieur d’une image Docker.

CircleCI fournit un ensemble d’images prĂ©dĂ©finies avec des dĂ©pendances communes. Ces images ont la valeur USER dĂ©finie sur circleci, ce qui entraĂźne un conflit des autorisations avec GitHub Actions.

Nous vous recommandons d’abandonner les images prĂ©dĂ©finies de CircleCI lorsque vous migrez vers GitHub Actions. Dans de nombreux cas, vous pouvez utiliser des actions pour installer les dĂ©pendances supplĂ©mentaires dont vous avez besoin.

Pour plus d’informations Ă  propos du systĂšme de fichiers Docker, consultez « Utilisation des exĂ©cuteurs hĂ©bergĂ©s par GitHub Â».

Pour plus d’informations sur les outils et les packages disponibles dans les images des exĂ©cuteurs hĂ©bergĂ©s par GitHub, consultez « Utilisation des exĂ©cuteurs hĂ©bergĂ©s par GitHub Â».

Utilisation de variables et de secrets

CircleCI et GitHub Actions permettent de définir des variables dans le fichier de configuration et de créer des secrets à l'aide de l'interface CircleCI ou GitHub UI.

Pour plus d’informations, consultez « Stocker des informations dans des variables Â» et « Utilisation de secrets dans GitHub Actions Â».

Mise en cache

CircleCI et GitHub Actions fournissent une méthode pour mettre manuellement en cache les fichiers dans le fichier de configuration.

Voici un exemple de syntaxe pour chaque systĂšme.

Syntaxe CircleCI pour la mise en cache

- restore_cache:
    keys:
      - v1-npm-deps-{{ checksum "package-lock.json" }}
      - v1-npm-deps-

Syntaxe GitHub Actions pour la mise en cache

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

GitHub Actions n’a pas d’équivalent de la mise en cache de couche Docker (ou DLC) de CircleCI.

Persistance des données entre les travaux

CircleCI et GitHub Actions fournissent des mécanismes permettant de conserver des données entre les travaux.

Voici un exemple de syntaxe de configuration CircleCI et GitHub Actions.

Syntaxe CircleCI pour la persistance des données entre les travaux

- persist_to_workspace:
    root: workspace
    paths:
      - math-homework.txt

...

- attach_workspace:
    at: /tmp/workspace

Syntaxe GitHub Actions pour la persistance des données entre les travaux

- name: Upload math result for job 1
  uses: actions/upload-artifact@v3
  with:
    name: homework
    path: math-homework.txt

...

- name: Download math result for job 1
  uses: actions/download-artifact@v3
  with:
    name: homework

Pour plus d’informations, consultez « Stockage et partage des donnĂ©es d’un workflow Â».

Utilisation de bases de données et de 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 CircleCI, la premiĂšre image rĂ©pertoriĂ©e dans config.yaml est l’image principale utilisĂ©e pour exĂ©cuter des commandes. GitHub Actions utilise des sections explicites : utiliser container pour le conteneur principal et lister des conteneurs supplĂ©mentaires dans services.

Voici un exemple de syntaxe de configuration CircleCI et GitHub Actions.

Syntaxe CircleCI pour l’utilisation de bases de donnĂ©es et de conteneurs de service

---
version: 2.1

jobs:

  ruby-26:
    docker:
      - image: circleci/ruby:2.6.3-node-browsers-legacy
        environment:
          PGHOST: localhost
          PGUSER: administrate
          RAILS_ENV: test
      - image: postgres:10.1-alpine
        environment:
          POSTGRES_USER: administrate
          POSTGRES_DB: ruby26
          POSTGRES_PASSWORD: ""

    working_directory: ~/administrate

    steps:
      - checkout

      # Bundle install dependencies
      - run: bundle install --path vendor/bundle

      # Wait for DB
      - run: dockerize -wait tcp://localhost:5432 -timeout 1m

      # Setup the environment
      - run: cp .sample.env .env

      # Setup the database
      - run: bundle exec rake db:setup

      # Run the tests
      - run: bundle exec rake

workflows:
  version: 2
  build:
    jobs:
      - ruby-26
...

- attach_workspace:
    at: /tmp/workspace

Syntaxe GitHub Actions pour l’utilisation de bases de donnĂ©es et de conteneurs de service

name: Containers

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    container: circleci/ruby:2.6.3-node-browsers-legacy

    env:
      PGHOST: postgres
      PGUSER: administrate
      RAILS_ENV: test

    services:
      postgres:
        image: postgres:10.1-alpine
        env:
          POSTGRES_USER: administrate
          POSTGRES_DB: ruby25
          POSTGRES_PASSWORD: ""
        ports:
          - 5432:5432
        # Add a health check
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
      # This Docker file changes sets USER to circleci instead of using the default user, so we need to update file permissions for this image to work on GH Actions.
      # See http://docs.github.com/actions/using-github-hosted-runners/about-github-hosted-runners#docker-container-filesystem

      - name: Setup file system permissions
        run: sudo chmod -R 777 $GITHUB_WORKSPACE /github /__w/_temp
      - uses: actions/checkout@v4
      - name: Install dependencies
        run: bundle install --path vendor/bundle
      - name: Setup environment configuration
        run: cp .sample.env .env
      - name: Setup database
        run: bundle exec rake db:setup
      - name: Run tests
        run: bundle exec rake

Pour plus d’informations, consultez « Ă€ propos des conteneurs de service Â».

Exemple complet

Voici un exemple concret. Le cĂŽtĂ© gauche affiche le fichier config.yml CircleCI rĂ©el pour le dĂ©pĂŽt thoughtbot/administrator. Le cĂŽtĂ© droit affiche l’équivalent dans GitHub Actions.

Exemple complet pour CircleCI

---
version: 2.1

commands:
  shared_steps:
    steps:
      - checkout

      # Restore Cached Dependencies
      - restore_cache:
          name: Restore bundle cache
          key: administrate-{{ checksum "Gemfile.lock" }}

      # Bundle install dependencies
      - run: bundle install --path vendor/bundle

      # Cache Dependencies
      - save_cache:
          name: Store bundle cache
          key: administrate-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle

      # Wait for DB
      - run: dockerize -wait tcp://localhost:5432 -timeout 1m

      # Setup the environment
      - run: cp .sample.env .env

      # Setup the database
      - run: bundle exec rake db:setup

      # Run the tests
      - run: bundle exec rake

default_job: &default_job
  working_directory: ~/administrate
  steps:
    - shared_steps
    # Run the tests against multiple versions of Rails
    - run: bundle exec appraisal install
    - run: bundle exec appraisal rake

jobs:
  ruby-25:
    <<: *default_job
    docker:
      - image: circleci/ruby:2.5.0-node-browsers
        environment:
          PGHOST: localhost
          PGUSER: administrate
          RAILS_ENV: test
      - image: postgres:10.1-alpine
        environment:
          POSTGRES_USER: administrate
          POSTGRES_DB: ruby25
          POSTGRES_PASSWORD: ""

  ruby-26:
    <<: *default_job
    docker:
      - image: circleci/ruby:2.6.3-node-browsers-legacy
        environment:
          PGHOST: localhost
          PGUSER: administrate
          RAILS_ENV: test
      - image: postgres:10.1-alpine
        environment:
          POSTGRES_USER: administrate
          POSTGRES_DB: ruby26
          POSTGRES_PASSWORD: ""

workflows:
  version: 2
  multiple-rubies:
    jobs:
      - ruby-26
      - ruby-25

Exemple complet pour GitHub Actions

# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialitĂ© et un support distincts.
# documentation en ligne.

# GitHub recommande d’épingler les actions Ă  un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez Ă©galement rĂ©fĂ©rencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Containers

on: [push]

jobs:
  build:

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

    runs-on: ubuntu-latest

    env:
      PGHOST: localhost
      PGUSER: administrate
      RAILS_ENV: test

    services:
      postgres:
        image: postgres:10.1-alpine
        env:
          POSTGRES_USER: administrate
          POSTGRES_DB: ruby25
          POSTGRES_PASSWORD: ""
        ports:
          - 5432:5432
        # Add a health check
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
      - uses: actions/checkout@v4
      - name: Setup Ruby
        uses: eregon/use-ruby-action@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
        with:
          ruby-version: ${{ matrix.ruby }}
      - name: Cache dependencies
        uses: actions/cache@v4
        with:
          path: vendor/bundle
          key: administrate-${{ matrix.image }}-${{ hashFiles('Gemfile.lock') }}
      - name: Install postgres headers
        run: |
          sudo apt-get update
          sudo apt-get install libpq-dev
      - name: Install dependencies
        run: bundle install --path vendor/bundle
      - name: Setup environment configuration
        run: cp .sample.env .env
      - name: Setup database
        run: bundle exec rake db:setup
      - name: Run tests
        run: bundle exec rake
      - name: Install appraisal
        run: bundle exec appraisal install
      - name: Run appraisal
        run: bundle exec appraisal rake