このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

Travis CI から GitHub Actions への移行

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

ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、GitHub Enterprise Server 3.0 のリリースノートを参照してください。


ノート: GitHubホストランナーは、現在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 を並行して実行します。 詳細については、「依存ジョブを作成する」を参照してください。

ステータスバッジ

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に対するマトリクスのエントリは、それぞれ環境変数の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: 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 プランによって異なります。 詳しい情報については、「使用制限、支払い、および管理」を参照してください。

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 条件を使用して、条件が満たされない限りジョブまたはステップが実行されないようにすることができます。 For more information, see "Expressions."

次の例は、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では、後で利用できるよう依存関係を手動でキャッシュできます。 以下の例は、それぞれのシステムでのキャッシュの構文を示します。

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

GitHub Actions キャッシングは、GitHub ホストランナーにのみ適用できます。 詳しい情報については、「ワークフローを高速化するための依存関係のキャッシュ」を参照してください。

一般的なタスクの例

このセクションは、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を学ぶ」を参照してください。

問題がまだ解決していませんか?