CircleCI 2.0 では、さまざまな方法で、ジョブの内外でデータを移動したり、データを保持したりできます。また、ワークスペースが導入されてからは、ジョブ間でデータを移動することも可能になりました。適切な機能を適切なタスクに使用すると、ビルドのスピード、再現性、効率性が向上します。

CI の実行が速くなれば、CI を利用しているユーザーにとって大きな利点になります。

再現性も重要です。CI プロセスが反復可能であれば、リポジトリから同じ SHA に対して同じプロセスを再実行する場合に、同じ結果が得られます。CI プロセスに再現性がないと、合格させるためにジョブを再実行しても、時間を浪費することになります。

CircleCI ジョブ間におけるデータフロー

Diagram-v3--Default.png

さまざまな方法で、CircleCI のジョブ間でデータを移動させることができます。ワークスペースは、単一のワークフローでジョブ間のデータを保持します。キャッシュは、異なるワークフロービルドの同じジョブ間でデータを保持します。アーチファクトは、ワークフローが終了した後もデータを保持します。ワークスペース、キャッシュ、アーチファクト間で、ユースケース、実装、およびデータが保持される時間が異なります。

ワークスペース

Diagram-v3-Workspaces.png ワークスペースは、ワークフロー内のシーケンシャルジョブ間でデータを移動します。

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

キャッシュとは異なり、ワークスペースは、ワークフローが完了すると存在しなくなるため、実行間で共有されることがありません。ただし、ワークフローを再実行する場合は例外になります。ワークフローの再実行の詳細と、ワークスペースの詳細については、別のブログ「CircleCI ワークスペースの詳細」で取り上げます。

キャッシュ

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

キャッシュを使用すると、以前のジョブの高価なフェッチ操作のデータを再利用できます。最初のジョブを実行した後に、作業のやり直しがなくなるため、ジョブのその後のインスタンスをより速く実行できます。Yarn、Bundler、Pip などのパッケージの依存関係マネージャーが主な例です。キャッシュから依存関係を復元して使用すると、yarn install などのコマンドでは、新しい依存関係がある場合に、新しい要素だけをダウンロードでき、ビルドごとにすべてを再ダウンロードする必要がなくなります。

キャッシュはプロジェクトでグローバルに使用され、あるブランチに保存されたキャッシュは他のブランチでも使用されるため、ブランチ間で共有できるデータにのみ使用する必要があります。このようなヒントや CircleCI のキャッシュについて詳しく知るには、キャッシュに関するドキュメント『CircleCI 2.0 Caching Doc』を参照してください。

アーティファクト

Diagram-v3-Artifact.png アーチファクトは、ワークフローが終了してなくなった後でも、データを保持します。

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

Android アプリでは、.apk ファイルが Google Play にアップロードされますが、このように、プロジェクトを何らかの形式や方法でパッケージングする必要があるケースは、アーチファクトの好例です。多くのユーザーは、アーティファクトを取得し、Amazon S3 や Artifactory などの会社全体で使用している保管場所にアップロードします。その他のヒントと最新情報は、アーチファクトについて説明している『CircleCI Artifacts Doc』を参照してください。

これらの CircleCI の機能は非常に柔軟であり、ここで説明されている以外の方法でも実装できます。これらは、一般的な使用例の提案です。


ワークスペースに関する多くの有用な情報と、ベストプラクティスについては、フォローアップのブログの「CircleCI ワークスペースの詳細」をお読みください。

OSS コンフィグを含む、ワークフローで実行できるすべての機能の概要については、「Wide World of Workflows(ワークフローの豊富な機能」の連載をご覧ください。