CircleCI には、ジョブ データの入出力や、データ維持の方法がいくつか用意されています。ワークスペースを使用すれば、ジョブ間でデータを移動することも可能です。タスクに応じて適切に機能を使い分けることが、ビルドの速度、再現性、効率性の向上につながります。

CI をスピーディーに実行できることのメリットは、CI テスト スイートをすべてパスするまで待ちぼうけした経験のある人には明白でしょう。

再現性も重要です。CI プロセスが再現可能であるとは、同じプロセスをリポジトリの同じ SHA に対して何度実行しても、同じ結果が得られる状態を言います。CI プロセスに再現性がないと、テストに合格するまでジョブを何度も実行し、時間を浪費することになります。

CircleCI ジョブ間のデータの流れ

Diagram-v3--Default.png

CircleCI ジョブ間でデータを維持する方法にはいくつかの種類があります。ワークスペースは、同じワークフロー内のジョブ間でデータを維持します。キャッシュは、異なるワークフロー ビルドにある同じジョブ間でデータを維持します。アーティファクトは、ワークフローの終了後もデータを維持します。ユースケース、実装、データが維持される期間は、ワークスペース、キャッシュ、アーティファクトでそれぞれ異なります。

CircleCI のワークスペース

Diagram-v3-Workspaces.png ワークスペースは、ワークフロー内の連続したジョブ間でデータを移動します。

ジョブでワークスペースを宣言すると、ワークスペースに 1 つ以上のファイルやディレクトリを追加できます。追加するたびに、ワークスペースのファイルシステムに新しいレイヤーが作成されます。ダウンストリーム ジョブでは、このワークスペースをジョブのニーズに合わせて使用したり、レイヤーを重ねて追加したりできます。

ワークスペースを使用してよく行われる処理は、ビルド ジョブで生成されたバージョン番号をデプロイ ジョブに渡すことです。コンパイル済みバイナリをワークスペースにより渡すこともできますが、バイナリはジョブごとにアップロードとダウンロードを行う必要があるため、メタデータを渡すだけの処理よりも低速になる可能性があります。

キャッシュとは異なり、ワークスペースはワークフローが完了したら破棄されるため、実行間で共有されません。唯一の例外は、ワークフローを再実行する場合です。ワークフローの再実行とワークスペースの詳細については、ブログ記事「CircleCI のワークスペースとは?」(英語) を参照してください。

CircleCI のキャッシュ

Diagram-v3-Cache.png キャッシュは、複数のワークフロー実行に含まれる同じジョブ間でデータを維持します。

キャッシュを使用すると、高コストなフェッチ操作のデータを以前のジョブから再利用できます。ジョブを初めに 1 回実行すれば、以降のそのジョブ インスタンスでは同じ処理をやり直す必要がなくなり、高速化されます。その典型的な例が、Yarn、Bundler、Pip などのパッケージ依存関係管理ツールです。キャッシュから依存関係を復元することで、yarn install などのコマンドを実行するときに、ビルドごとにすべてを再ダウンロードするのではなく、新しい依存関係をダウンロードするだけで済むようになります。

キャッシュはプロジェクト内でグローバルなので、あるブランチで保存されたキャッシュは他のブランチでも使用されます。そのため、キャッシュは、ブランチ間で共有しても問題ないデータだけに使用するよう注意してください。他のヒントや CircleCI のキャッシュに関する詳細は、CircleCI 2.0 のキャッシュについてのドキュメントを参照してください。

CircleCI のアーティファクト

Diagram-v3-Artifact.png アーティファクトは、ワークフローが完了し破棄された後もデータを維持します。

アーティファクトは、ビルド プロセスの出力を長期保存するために使用します。たとえば、Java プロジェクトでは、通常、ビルドするとコードの .jar ファイルが生成されます。このコードは、テストでバリデーションする対象になります。ビルド/テスト プロセス全体が成功したら、プロセスの出力 (.jar) をアーティファクトとして保存します。こうすれば、生成元のワークフローが終了してから長時間が経過しても、.jar ファイルを CircleCI のアーティファクト システムからダウンロードできます。

アーティファクトは、なんらかの形でのプロジェクトのパッケージ化が必要な場合 (たとえば Android アプリを .apk ファイルとして Google Play にアップロードする場合) に、よく使われています。多くのユーザーがアーティファクトを生成し、Amazon S3 や Artifactory などの社内共有ストレージにアップロードしています。その他のヒントと最新情報については、CircleCI のアーティファクトについてのドキュメントを参照してください。


ワークスペースに関する情報と最適な使い方をもっと知りたいかたは、関連ブログ記事「CircleCI のワークスペースとは?」(英語) をぜひご覧ください。

OSS 構成を含む、ワークフローで実行できる機能すべての概要については、下記の「広大なワークフローの世界」(英語) の各連載記事を参照してください。