Skip to main content

Travis CI から GitHub Actions への移行

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

メモ

GitHub Enterprise Server ホステッド ランナーは、現在 GitHub ではサポートされていません。

はじめに

このガイドは、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 実行されます。 詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。

状態バッジ

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@v6
  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 組織は、組織のシークレットにアクセスできるリポジトリを制限できます。 デプロイ保護規則では、環境シークレットにアクセスするためのワークフローに対して手動承認が必要になる場合があります。 詳しくは、「シークレット」をご覧ください。

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

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

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

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

で異なる言語を使用する 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@v4
  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

GitHub Actions Node.js を使用して構築するためのワークフロー

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - 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の主な機能については、ワークフローの書き込み を参照してください。