ワークスペースとキャッシュ
ワークスペースとよく混同しがちなのがキャッシュです。実際、ワークスペースでも依存関係を保存して後のジョブで使い回せばキャッシュと同じようなことができます。
ではワークスペースとキャッシュはどう違うのでしょうか? 一言で言うと、ワークスペースは実行中のワークフロー内だけで有効なのに対し、キャッシュはワークフローをまたいで使うことができます。つまり、ワースペースとキャッシュではライフサイクルが異なります。
英語になってしまいますが、以下の図はワークスペースとキャッシュのライフサイクルの違いを表しています。
ワークスペースが縦(1つのワークフローの上流から下流ジョブ)へ移動するのに対し、キャッシュは横(ワークフローをまたぐ)に移動していることが分かります。
ワークスペースをキャッシュとして使うと、最低でも1回は依存関係のフルインストールが走ってしまいます。なぜなら、ワークスペースはワークフローが終了されると削除されてしまうからです。対して、キャッシュはワークフローをまたぐので、前のワークフローで一度依存関係をキャッシュしてしまえば依存関係が変わらない限り同じキャッシュを使い回すことができるのでパフォーマンスの面で優れています。
もしこの2つの違いが分かりにくい時はシンプルに、依存関係のキャッシュにはsave_cacheとrestore_cacheを使い、上流から下流のジョブへファイルを渡したい時はattach_workspaceとpersist_workspaceを使うと覚えておけばよいでしょう。
その他のワークフロー
ここまで紹介したのとは別の種類のワークフローもあります。スケジュールされたワークフローと承認ワークフローです。
通常CircleCIのワークフローはVCSへのコードのプッシュをトリガーとして開始されます。スケジュールされたワークフローを使うと、コード変更がなくても決まった時間にワークフローを開始することができます。
workflows:
version: 2
nightly-build:
triggers:
- schedule:
cron: "0 0 * * *"
jobs:
- build
上記はスケジュールされたワークフローの例です。実行する時間はPOSIXのcrontabの書式で指定します。上記の例だとnightly-buildというワークフローを毎日0時に実行します。
他にも手動で承認が必要なワークフローも設定することができます。主な使い所としては、デプロイジョブを承認が必要なようにして、ある権限を持ったユーザーしかデプロイを行えないようにする方法です。
workflows:
version: 2
test-and-lint:
jobs:
...
- deploy:
type: approval
requires:
- run_test
- run_lint
- precompile
この例だとdeployジョブがtype: approvalになっているので、依存するジョブがすべて完了しても承認されるまで開始されません。実際にワークフローの画面を見ると”ON HOLD"というステータスで止まっていることが分かります。
- 修正履歴
-
- 2019/01/16 10:41 コラム「requiresの補足説明」のコードを修正しました。
この記事は参考になりましたか?
- エンジニアのためのCI/CD再入門連載記事一覧
-
- モダンなCI/CDでは欠かせないワークフローを使った高度なビルド管理
- CircleCIで始めるCI/CD導入の基本のキ
- CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか?
- この記事の著者
-
金 洋国(CircleCI Japan)(キム ヒロクニ)
CircleCIで2.0などのプロダクト開発に携わった後、CircleCI Japanを立ち上げてからはTech Leadとして技術全般を担当。趣味は電動キックボードで日本で普及するように様々な活動をしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
