Skip to main content

Travis CI から GitHub Actions への移行

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

Note

GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。

はじめに

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

開始する前に

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

ジョブ実行の比較

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

主な類似点

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

YAML 構文の使用

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

カスタム変数

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 構文

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

マトリックスの GitHub Actions 構文

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

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

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

以下は、それぞれのシステムにおける構文の例です。

特定のブランチをターゲットにするための Travis CI 構文

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

特定のブランチをターゲットにするための GitHub Actions 構文

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

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

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

以下は、それぞれのシステムにおける構文の例です。

サブモジュールをチェックアウトするための Travis CI 構文

git:
  submodules: false

サブモジュールをチェックアウトするための GitHub Actions 構文

- uses: actions/checkout@v4
  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: '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

GitHub Actions の主な機能

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

シークレットの保存

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

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

GitHub Actions には、成果物のストレージの統合サポートが含まれており、ワークフロー内のジョブ間でファイルを共有できます。 結果のファイルを保存して、他のワークフローと共有することもできます。 詳しくは、「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 構文

language: python
python:
  - "3.7"

script:
  - python script.py

ステップとアクションの GitHub Actions 構文

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

依存関係のキャッシング

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

これらの例は、各システムのキャッシュ構文を示しています。

キャッシュの Travis CI 構文

language: node_js
cache: npm

キャッシュの GitHub Actions 構文

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

一般的なタスクの例

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

環境変数の設定

GitHub Actionsのジョブではカスタムの環境変数を作成できます。

環境変数の Travis CI 構文

env:
  - MAVEN_PATH="/usr/local/maven"

環境変数を含む GitHub Actions ワークフロー

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Node.jsでのビルド

Node.js でのビルドのための Travis CI

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

Node.js でのビルドのための GitHub Actions ワークフロー

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

次の手順

GitHub Actions の主な機能について引き続き学習するには、「ワークフローの書き込み」をご覧ください。