Travis CI からの移行
Travis CI から CircleCI に移行する方法を概説します。
このドキュメントで使用しているビルド構成の例は、JavaScript のサンプル リポジトリを基にしています。
前提条件
本ドキュメントでは、以下を前提としています。
- リポジトリがリンクされた CircleCI アカウントをお持ちになっていることを前提としています。 まだアカウントをお持ちでない場合は、CircleCI の入門ガイドを参照してください。
- CircleCI では、チェックアウトされたコードを実行 (ビルド、テストなど) する環境を Executor と呼びます。
設定ファイル
- Scaling Concurrency: You can run up to 80 concurrent jobs on our monthly Performance plan or even more on a custom plan. Travis CI has capped concurrencies of 1, 2, 5, and 10 on each of their plans.
- 初回のビルド後にすべての依存関係をキャッシュして、ビルド時間の短縮を図る
- Parallelization by Timing: On top of running many jobs concurrently, CircleCI offers built-in test splitting across multiple environments by timing. This dramatically reduces wall clock time for large test suites to finish. You must implement this manually in Travis CI.
- Orbs: Rather than proprietary integrations, CircleCI offers orbs, which are reusable, templated configuration. On top of connecting to services and tools, orbs can be used to standardize and templatize configuration for your team and organization as well. Visit the registry.
コードのプッシュ時のビルド
Both Travis CI and CircleCI make use of a configuration file to define your workflows and jobs. CircleCI の場合は、リポジトリのルートにある .circleci/config.yml
ファイルに保存します。
Below, you’ll find a side-by-side comparison of different configuration declarations.
Travis CI | CircleCI | 説明 |
---|---|---|
language: | docker、machine、macos | CircleCI doesn’t assume dependencies or commands based on a language; instead, choose an executor and use run: steps as shown below to execute commands you require (e.g., install, build, test). |
dist: | machine | CircleCI の Linux VM Executor は Ubuntu VM です。 設定ファイルで バージョンを指定できます。 |
cache components: | restore_cache:、save_cache: | キャッシュの復元機能と保存機能を使用して、ビルド内のキャッシュを制御します。 |
before_cache | run: | キャッシュする前にコマンドを実行する場合は、単にキャッシュ ステップの前に run: ステップを記述します。 |
before_install: | run: | CircleCI では、コマンドをステージまたはタイプに分割しません。 run: ステップを使用して任意のコマンドを指定し、必要に応じて順序付けします。 条件付きステップの使用方法については、設定ファイルに関するドキュメントを参照してください。 |
install: | run: | 上記を参照。 |
before_script | run: | 上記を参照。 |
script: | run: | 上記を参照。 |
after_script: | run: | 上記を参照。 |
deploy: | run: | Use a run: step to run needed commands for deployment. デプロイ設定 を参照してください。 |
env: | environment: | environment: 要素を使用して、環境変数を指定します。 |
matrix: | matrix: | CircleCI ではワークフローを使用して複数のジョブをオーケストレーションできます。 |
stage: | requires: | requires: 要素を使用して、ジョブの依存関係を定義し、ワークフローでの並列ビルドを制御します。 |
環境変数
ドキュメント冒頭のリンク先にあるサンプル リポジトリは、記事の作成、読み取り、更新、削除を行う基本的なアプリケーションです。 アプリケーションは MERN
スタックを使用してビルドし、クライアント上でテストを実行し、コードのプッシュ時に毎回 REST API を実行します。
CircleCI で同じ結果を得るために必要な構成をサンプル リポジトリから以下に抜粋します。
language: node_js
services: mongodb
before_install:
- npm i -g npm@5
node_js:
- "5"
cache: npm
基本的なビルドの場合、Travis CI の構成では、言語に関する最もよく知られた依存関係とビルド ツールを使用し、1 つのジョブ ライフサイクルにおいてオーバーライド可能なデフォルトのコマンドとしてそれらを抽象化します。 このビルドを実行すると、Travis CI は自動的に install
ステップとして npm install
を実行し、script
ステップとして npm start
を実行します。
CI 環境をさらに制御する必要があるときには、フックを使用して install
ステップと script
ステップの前後でコマンドを実行できます。 上記の例では、「before フック」を使用して npm バージョンを 5
に固定するように指定しています。 実行するシェル スクリプトは、通常、リポジトリのルートの .travis
フォルダーに格納します。
CircleCI で同じ結果を得るために必要な構成をサンプル リポジトリから以下に抜粋します。
version: 2.1
workflows:
version: 2
build:
jobs:
- build
jobs:
build:
working_directory: ~/mern-starter
docker:
- image: cimg/node:17.2.0 # Primary execution image
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
- image: mongo:3.4.4 # Service/dependency image
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
steps:
- checkout
- run:
name: update-npm
command: 'sudo npm install -g npm@5'
- restore_cache:
key: dependency-cache-{{ checksum "package-lock.json" }}
- run:
name: install-npm-wee
command: npm install
- save_cache:
key: dependency-cache-{{ checksum "package-lock.json" }}
paths:
- ./node_modules
- run:
name: test
command: npm test
上記の構成では、特に言語を必要としていません。 また、ユーザーは任意の数の step
を指定して実行でき、ステップの順序にも制約はありません。 Docker を利用することで、特定のバージョンの Node.js と MongoDB が各 command
で使用可能になります。
コンテナの使用
CircleCI では、依存関係をキャッシュおよび復元するタイミングとその方法を設定ファイルで制御できます。 上記の CircleCI の .circleci/config.yml
では、特に package-lock.json
ファイルのチェックサムに基づいて依存関係のキャッシュをチェックしています。 package-lock.json
に限らず、任意のキーに基づいてキャッシュを設定したり、一連のキャッシュ パスに対して宣言した順序でキャッシュを保留するよう設定したりすることができます。 ビルド時にキャッシュを作成および復元する方法のカスタマイズについては「依存関係のキャッシュ」を参照してください。
Travis の構成の場合、依存関係のキャッシュは、ビルド時の script
フェーズの後に発生し、使用している言語に関連付けられます。 .travis.yml
の例では、cache: npm
キーを使用することで、依存関係はデフォルトで node_modules
をキャッシュするようになっています。
アーティファクトのアップロード
メモ: CircleCI には、定義済み環境変数が複数用意されています。
Travis CI では、AWS S3 を使用して手動で、または GitHub リリースのアタッチメントとしてビルド アーティファクトをアップロードできます。
CircleCI の .circleci/config.yml
では、ビルド構成のステップ、ジョブ、またはコンテナ内に環境変数を直接含めることができます。 これらはパブリック変数であり、暗号化されていません。 Travis CI では、暗号化された環境変数を構成に直接含めることができます (travis
gem をインストールしている場合に限ります)。
依存関係のキャッシュ
Web アプリケーションでの環境変数の設定
Travis CI のリポジトリ設定を使用している場合は、CircleCI のプロジェクト設定のページで簡単に環境変数を設定できます。 詳細については、「プロジェクトでの環境変数の設定」を参照してください。
CircleCI では、コンテキストを使用することで、すべてのプロジェクト間で安全に環境変数を共有できます。
メモ: CircleCI には、定義済み環境変数が複数用意されています。
高度なツール
With Travis CI you can upload build artifacts either manually using AWS S3 or as an attachment to a GitHub Release.
CircleCI では、アーティファクトのアップロードは設定ファイル内の 1 ステップとして実行します。
- run:
name: テスト
command: npm test
- run:
name: コード カバレッジの生成
command: './node_modules/.bin/nyc report --reporter=text-lcov'
- store_artifacts: # < test-results.xml を保存します。Web アプリまたは API から使用できます
path: test-results.xml
prefix: tests
- store_artifacts:
path: coverage
prefix: coverage
- store_test_results:
path: test-results.xml
アーティファクトのアップロードが完了すると、ブラウザー上でジョブ ページの [Artifacts (アーティファクト)] タブでアーティファクトを確認したり、CircleCI API からアクセスしたりすることができます。 詳細については、「ビルド アーティファクトの保存」を参照してください。
Advanced tooling
Travis でさらに高度な構成を行いたい場合は、ビルド マトリックス (複数の並列ジョブの実行を指定する構成) やビルド ステージ (ジョブをステージにグループ化して並列実行したり、順次前のジョブの成功に基づいてジョブを順次実行したりする機能) が利用できます。
CircleCI では、.circleci/config.yml
で ワークフロー を使用することで、ジョブのグループ化と実行順序、並列実行の利用、ビルドのファンインまたはファンアウト、順次実行ビルドを定義できます。 ワークフローを使用すると、ビルド構成に対して複雑できめ細かな制御を行えるようになります。
ドキュメントの改善にご協力ください
このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。
- このページの編集をご提案ください (最初に「コントリビューションガイド」をご覧ください)。
- ドキュメントの問題点を報告する、またはフィードバックやコメントを送信するには、GitHub で issue を作成してください。
- CircleCI は、ユーザーの皆様の弊社プラットフォームにおけるエクスペリエンスを向上させる方法を常に模索しています。 フィードバックをお寄せいただける場合は、リサーチコミュニティにご参加ください。
サポートが必要ですか?
CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。
または、サポートサイトから、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。

CircleCI Documentation by CircleCI is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.