azihsoyn's blog

技術のこととか釣りの事とか(書けたらいいなぁ)

CircleCI2.0のmanual approvalにexpireを設定する

CircleCIって、便利ですよね。

workflowやorbsなど機能追加もどんどん行われていてとても素晴らしいサービスです。

それらをフルに活用したブログがグノシーという会社のアドベントカレンダーで紹介されていました。

tech.gunosy.io

とても参考になるので是非読んでみてください。

さて、上記のテックブログで紹介されていたmanual approvalなのですが、気をつけなければいけないことがあります。

discuss.circleci.com

こちらの質問に書かれている通りexpireが設定できません。 つまりslackから古いリンク経由で過去のアプリケーションをデプロイできてしまうということです。

これに対する提案も上がっています。

ideas.circleci.com

いつかCircleCIが公式でサポートするような気がしますが、今すぐこれを実現したい場合どうするか考えてみて、実現できたのでブログにしたためてます。ついでにorbsも作ってみたかったので公開しました。

https://circleci.com/orbs/registry/orb/azihsoyn/job-expiration

github.com

使い方は至ってシンプルで、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

以下も参考にさせていただきました。

さて、このorbですが、やってることはとてもシンプルで、適当なファイルに現在時間を書き込んで、チェックするときに現在時間と照らし合わせてるだけです。

工夫してる点があるとすればworkflowのjobをまたいでファイルを読むためにsave_cache, restore_cacheを使っていることぐらいでしょうか。

(なお、save_cache, restore_cacheはimageによっては使えないことがあります)

qiita.com

普通にbashのコマンド書けば十分ですがもしよかったら使ってみてください。