Github Actions からの移行
このドキュメントでは、GitHub Actions から CircleCI に移行する方法を概説します。
概念
ジョブとワークフロー
GitHub Actions と CircleCI には、「ジョブ」と「ワークフロー」という似たような概念があります。 ワークフローは、複数の連結されたジョブのエンドツーエンドの流れであり、ジョブは小さなタスク (例えば、「ユニットテストの実行」や「Docker イメージのビルド」) を実行するためのコマンドで構成されています。
主に異なる点は、CircleCI では設定構文においてワークフローとジョブの依存関係をジョブのインラインではなく別のセクションで設定します。
GitHub | CircleCI |
---|---|
| [source, yaml] ---- jobs: job_1: executor: my-ubuntu-exec steps: # job steps job_2: executor: my-ubuntu-exec steps: # job steps workflows: my_workflow: jobs: - job_1 - job_2: requires: - job_1 ---- |
Actions と Orb の比較
GitHub の「アクション」とは、ジョブ内で実行する再利用可能なコマンドやタスクのことです。 しかし、それらは Docker コンテナ内で実行するように書かれていたり、JavaScript で個々のステップとしてコーディングされています。 そのため、作業が増え、適用できる範囲が限られてしまいます。
CircleCI の場合は、同様の機能を Orb で提供しています。 主な違いは、CircleCI の Orb はパッケージ化された再利用可能な YAML であり、再利用可能なジョブ、Executor、またはコマンドを 「Orb 化」し、ジョブやワークフローの中で適切に使用することができます。
GitHub では、Marketplace でアクションを参照できます。CircleCI では、パートナーやコミュニティの多数の認定 Orb やインテグレーションが記載された インテグレーションのページ だけでなく、 Orb レジストリ もあります。
ランナーと Executor の比較
GitHub では、YAML の runs-on
キーによって、Linux、macOS、Windows のビルドの実行環境を指定することができ、コンテナで何かを実行したい場合は、追加の container
キーを指定します。
CircleCI では、同じように環境 (Executor と呼ばれる) を選択でき、Docker 用のオプションや機能が追加されています。
各 Executor のタイプ にお好きなバージョンを選択することができ、それによりその後インストールされるベースソフトウェアのバージョンが異なります。
以下の表を参照して設定を比較してください。
設定の比較
Docker実行環境を使用する場合は、イメージ・レジストリ(image registries)から Docker プルを認証することを推奨します。 認証されたプルでは、プライベートな Docker イメージにアクセスすることができ、レジストリのプロバイダによっては、より高いレート制限が付与される場合もあります。 詳細は、 Docker の認証付きプルの使用 を参照して下さい。 |
GitHub の設定 | CircleCI の設定 |
---|---|
実行環境の指定: GitHub ではコンテナの実行は別々に指定されますが、CircleCI では | |
| [source, yaml] ---- # Docker (container) Executor docker: - image: cimg/openjdk:17.0 # Linux Ubuntu Executor machine: true # macOS Executor macos: xcode: 14.2.0 # Windows Executor # NOTE: Orb declaration needed. See docs executor: win/vs2019 ---- |
依存関係/サービスの指定: CircleCI で最初に指定されたイメージ以降に指定されたイメージは、すべて 依存関係 として扱われます。 | |
| [source, yaml] ---- jobs: build: docker: # Primary Executor - image: cimg/openjdk:17.0 # Dependency Service(s) - image: postgres:10.8 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ---- |
ジョブ内で 実行する ステップの指定: 同じような機能ですが、構文が異なります。 | |
| [source, yaml] ---- jobs: build: # executor config here steps: - run: name: Build with Gradle command: ./gradlew build ---- |
共有タスクの利用 (GitHub ならアクション、CircleCI なら Orb): CircleCI では、最初にトップレベルの Orb を宣言し、 設定で名前によりその Orb を参照します 。これは Python や JavaScript のインポートに似た概念です。 | |
| [source, yaml] ---- orbs: slack-orb: circleci/slack@3.4.0 jobs: build: # executor config here steps: - slack-orb/notify: color: '#32788D' message: Tests passed title: Testing Slack Orb author_name: Bobby webhook: # WEBHOOK ---- |
ワークフローでの条件付きステップの使用: CircleCI では、 ステップの基本的な条件 (例: on_success (デフォルト)、 on_success、on_failure) だけでなく、パラメーターに基づいた 条件付きのステップ を提供しています。 また、 条件付きのジョブ も提供しており、条件付きのパラメーター化されたワークフローとパイプラインが現在 プレビュー中 です。 | |
| [source, yaml] ---- jobs: build: # executor config here steps: - run: name: My Failure Step command: echo "Failed step" when: on_fail - run: name: My Always Step command: echo "Always step" when: always ---- |
GitHub Actions と CircleCI の設定は似ているため、ジョブやワークフローの移行は非常に簡単です。
GitHub Actions と CircleCI の設定は似ているため、ジョブやワークフローの移行は非常に簡単です。 しかし、移行を成功させる可能性を高めるために、アイテムを以下の順序で移行することをお勧めします。
-
アクションから Orb 。 レジストリは ここ で確認できます。