はじめに
このガイドは、Travis CI から GitHub Actions に移行するのに役立ちます。 概念と構文を比較して類似点を説明し、一般的なタスクに対するさまざまなアプローチを示します。
開始する前に
GitHub Actionsへの移行を開始する前に、そのしくみを理解すると便利です。
- GitHub Actions ジョブを示す簡単な例については、GitHub Actionsのクイック スタート を参照してください。
- 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 のマトリックス エントリはそれぞれ、環境変数 site と datacenter に異なる値を使用するように構成されています。 次に 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プランによって異なる場合があります。 詳しくは、「課金と使用」をご覧ください。
で異なる言語を使用する 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の主な機能については、ワークフローの書き込み を参照してください。