Skip to main content

Travis CI から GitHub Actions への移行

GitHub Actions と Travis CI は複数の類似点を共有しているため、GitHub Actions への移行は比較的簡単です。

はじめに

このガイドは、Travis CI から GitHub Actions に移行するときに役立ちます。 概念と構文を比較して類似点を説明し、一般的なタスクに対するさまざまなアプローチを示します。

開始する前に

GitHub Actions への移行を開始する前に、その仕組みを理解しておくと便利です。

ジョブ実行の比較

CI タスクがいつ実行されるかを制御できるように、GitHub Actions ワークフロー では、既定で並行実行される ジョブ を使います。 各ジョブには、定義した順序で実行される ステップ が含まれています。 ジョブのセットアップおよびクリーンアップアクションを実行する必要がある場合は、各ジョブでステップを定義してこれらを実行できます。

主な類似点

GitHub Actions と Travis CI は特定の類似点を共有しており、これらを事前に理解しておくと、移行プロセスを円滑に進めることができます。

YAML 構文の使用

Travis CI と GitHub Actions はどちらも YAML を使用してジョブとワークフローを作成し、これらのファイルはコードのリポジトリに保存されます。 GitHub Actions で YAML を使う方法の詳細については、「ワークフロー ファイルの作成」を参照してください。

カスタム環境変数

Travis CI では環境変数を設定し、ステージ間で共有できます。 同様に、GitHub Actions を使用すると、ステップ、ジョブ、またはワークフローの環境変数を定義できます。 詳細については、「環境変数」を参照してください。

既定の環境変数

Travis CI と GitHub Actions の両方に、YAML ファイルで使用できるデフォルトの環境変数が含まれています。 GitHub Actions の場合、「既定の環境変数」にこれらが一覧表示されています。

並列なジョブの処理

Travis CI では、stages を使ってジョブを並列実行できます。 同様に、GitHub Actions では jobs を並行実行します。 詳細については、「依存ジョブを作成する」を参照してください。

状態バッジ

Travis CI と GitHub Actions はどちらもステータスバッジをサポートしており、ビルドが成功したか失敗したかを示すことができます。 詳細については、リポジトリへのワークフロー状態バッジの追加に関する記事を参照してください。

マトリックスの使用

Travis CI と GitHub Actions の両方でマトリックスがサポートされるため、オペレーティング システムとソフトウェア パッケージの組み合わせを使ってテストを実行できます。 詳しくは、「ジョブにマトリックスを使用する」をご覧ください。

以下は、各システムの構文を比較した例です。

Travis CI GitHub Actions
matrix:
  include:
    - rvm: 2.5
    - rvm: 2.6.3
jobs:
  build:
    strategy:
      matrix:
        ruby: [2.5, 2.6.3]

特定のブランチをターゲットにする

Travis CI と GitHub Actions はどちらも、CI を特定のブランチにターゲット設定できます。 詳細については、「GitHub Actions のワークフロー構文」を参照してください。

以下が、それぞれのシステムの構文の例です。

Travis CI GitHub Actions
branches:
  only:
    - main
    - 'mona/octocat'
on:
  push:
    branches:
      - main
      - 'mona/octocat'

サブモジュールをチェックアウトする

Travis CI と GitHub Actions はどちらも、サブモジュールをリポジトリクローンに含めるかどうかの制御ができます。

以下が、それぞれのシステムの構文の例です。

Travis CI GitHub Actions
git:
  submodules: false
- uses: actions/checkout@v2
  with:
    submodules: false

マトリックスで環境変数を使用する

Travis CI と GitHub Actions はどちらも、カスタム環境変数をテストマトリックスに追加できます。これにより、後のステップで変数を参照できます。

GitHub Actions では、include キーを使って、カスタム環境変数をマトリックスに追加できます。 この例では、node-version のマトリックス エントリはそれぞれ、環境変数 sitedatacenter に異なる値を使用するように構成されています。 次に Echo site details ステップでは、env: ${{ matrix.env }} を使用してカスタム変数を参照します。

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

GitHub Actions の主な機能

Travis CI から移行する場合は、GitHub Actions の次の主要機能を考慮してください。

シークレットの保存

GitHub Actions を使用すると、シークレットを保存して、ジョブで参照できます。 GitHub Actions Organization は、Organization のシークレットにアクセスできるリポジトリを制限できます。 環境保護ルールでは、環境シークレットにアクセスするためのワークフローの手動承認が必要になる場合があります。 詳細については、「暗号化されたシークレット」を参照してください。

ジョブとワークフロー間でファイルを共有する

GitHub Actions には、成果物のストレージの統合サポートが含まれており、ワークフロー内のジョブ間でファイルを共有できます。 結果のファイルを保存して、他のワークフローと共有することもできます。 詳細については、「ジョブ間でデータを共有する」を参照してください。

自分のランナーをホストする

ジョブに特定のハードウェアまたはソフトウェアが必要な場合、GitHub Actions を使用すると、自分のランナーをホストして、処理のためにジョブをそれらに送信できます。 GitHub Actions では、ポリシーを使用してこれらのランナーへのアクセス方法を制御し、Organization またはリポジトリレベルでアクセスを許可することもできます。 詳細については、「自分のランナーをホストする」を参照してください。

GitHub Actions で様々な言語を使用する

GitHub Actions でさまざまな言語を使用する場合、ジョブにステップを作成して言語の依存関係を設定できます。 特定の言語での作業の詳細については、それぞれのガイドを参照してください。

スクリプトの実行

GitHub Actions では、run ステップを使ってスクリプトまたはシェル コマンドを実行できます。 特定のシェルを使うには、スクリプトへのパスを指定するときに shell 型を指定できます。 詳細については、GitHub Actions のワークフロー構文に関するページを参照してください。

たとえば次のような点です。

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

GitHub Actions でのエラー処理

GitHub Actions に移行する場合、エラー処理にはさまざまな方法があり、注意が必要です。

スクリプトエラーの処理

GitHub Actions は、いずれかのステップでエラーコードが返された場合、すぐにジョブを停止します。 詳細については、GitHub Actions のワークフロー構文に関するページを参照してください。

ジョブエラーの処理

GitHub Actions では、if 条件文を使って、特定の状況でジョブまたはステップを実行します。 たとえば、あるステップは、別のステップで failure() が発生したときに実行できます。 詳細については、GitHub Actions のワークフロー構文に関するページを参照してください。 また、continue-on-error を使って、ジョブが失敗したときにワークフロー実行が停止しないようにすることもできます。

条件文と式の構文を移行する

条件式でジョブを実行するために、Travis CI と GitHub Actions では同様の if 条件構文を共有します。 GitHub Actions を使うと、if 条件文を使って、条件が満たされない限りジョブまたはステップが実行されないようにすることができます。 詳細については、「」を参照してください。

次の例は、ステップを実行するかどうかを if 条件文で制御する方法を示しています。

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

フェーズからステップに移行する

Travis CI が フェーズ を使用して ステップ を実行する場合、GitHub Actions には アクション を実行する ステップ があります。 GitHub Marketplace でビルド済みアクションを見つけることも、独自のアクションを作成することもできます。 詳細については、「アクションのビルド」を参照してください。

以下が、それぞれのシステムの構文の例です。

Travis CI GitHub Actions
language: python
python:
  - "3.7"

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

依存関係のキャッシング

Travis CIとGitHub Actionsでは、後で利用できるよう依存関係を手動でキャッシュできます。

GitHub Actions キャッシュは、GitHub.com または GitHub Enterprise Server 3.5 以降でホストされているリポジトリでのみ使用できます。 詳細については、「ワークフローを高速化するための依存関係のキャッシュ」を参照してください。

一般的なタスクの例

このセクションは、GitHub ActionsとTravis CIでの一般的なタスクの実行方法を比較します。

環境変数の設定

GitHub Actionsのジョブではカスタムの環境変数を作成できます。 たとえば次のような点です。

Travis CI GitHub Actionsのワークフロー
env:
  - MAVEN_PATH="/usr/local/maven"
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Node.jsでのビルド

Travis CI GitHub Actionsのワークフロー
install:
  - npm install
script:
  - npm run build
  - npm test
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

次の手順

GitHub Actions の主な機能について引き続き学習するには、「GitHub Actions について学ぶ」を参照してください。