CircleCI2.0のmanual approvalにexpireを設定する
CircleCIって、便利ですよね。
workflowやorbsなど機能追加もどんどん行われていてとても素晴らしいサービスです。
それらをフルに活用したブログがグノシーという会社のアドベントカレンダーで紹介されていました。
とても参考になるので是非読んでみてください。
さて、上記のテックブログで紹介されていたmanual approvalなのですが、気をつけなければいけないことがあります。
こちらの質問に書かれている通りexpireが設定できません。 つまりslackから古いリンク経由で過去のアプリケーションをデプロイできてしまうということです。
これに対する提案も上がっています。
いつかCircleCIが公式でサポートするような気がしますが、今すぐこれを実現したい場合どうするか考えてみて、実現できたのでブログにしたためてます。ついでにorbsも作ってみたかったので公開しました。
https://circleci.com/orbs/registry/orb/azihsoyn/job-expiration
使い方は至ってシンプルで、3行追加するだけです。
version: 2.1 orbs: expiration: azihsoyn/job-expiration@0.1.0 jobs: build: docker: - image: <docker image> steps: - expiration/set: // 好きなタイミングでexpireをセット ttl: 600 - expiration/check // 好きなタイミングでexpireチェック
orbの作り方は公式にもありますが、 Creating Orbs - CircleCI
以下も参考にさせていただきました。
- はじめてのCircleCI Orbsを公開した - Hack Your Design!
- CircleCI Orbs 入門 | tsub’s blog
- CircleCI Orbsをテストする - Qiita
- 俺的CircleCI Orbs開発ベストプラクティス - くりにっき
さて、このorbですが、やってることはとてもシンプルで、適当なファイルに現在時間を書き込んで、チェックするときに現在時間と照らし合わせてるだけです。
工夫してる点があるとすればworkflowのjobをまたいでファイルを読むためにsave_cache, restore_cacheを使っていることぐらいでしょうか。
(なお、save_cache, restore_cacheはimageによっては使えないことがあります)
普通にbashのコマンド書けば十分ですがもしよかったら使ってみてください。