これまで雰囲気で CircleCI を触ってた
んだけど、わけあって(おい!)ちゃんと勉強しようと思ったので、ひととおりドキュメントに目を通して、この本をさらっと読んだ。想像してたよりも新しい情報が説明されていてとても良い本でした。
そんなわけで、
CircleCI 完全に理解した!!
知らない人もいると思うのでちゃんと書いておくと「完全に理解した」は「入門したぞー!」って意味ね。まぁ、↓の左の人は本当に完全に理解してると思うけど(もちろん右の人も)
「完全に理解した」と「チヨットデキル」Tシャツを着る弊社の愉快な経営陣🤣(左CEO Jim Roseと右CTO Rob Zuber) pic.twitter.com/RXM62p4msy
— CircleCI Japan (@CircleCIJapan) December 7, 2018
雰囲気は分かったので、実際に触りはじめることにする。今日は2つの部品で遊んでみた。
部品1:Dynamic Configuration
最初の部品は Dynamic Configuration。設定ファイルを動的に生成して使うことができる。この記事で知った:
Dynamic Configurationを使って.circleci/config.ymlを分割する
この記事では、config.yml を分割して管理しておいて、実行時にファイルを yq
でマージしてる。なるほどなー。分割できるのはとても良さそう。
記事の中では yq
をインストールしてるけど、手元で確認してみたら最初からイメージに入ってそう。最近追加されたのかもしれない?
❯ docker run --platform linux/x86_64 -ti --rm cimg/base:stable yq --version yq (https://github.com/mikefarah/yq/) version 4.13.3
なんとなく雰囲気は分かったので、実際に自分でやってみたらどういう感じなのか確かめてみよう。まねしてファイルを分割してもいいけど、せっかくなのでちょっとだけ違う方向で「設定ファイルを選んで実行」みたいなのやってみようかな。
部品2:Run Pipeline
「設定ファイルを選んで実行」をやろうと思ったら実行時にパラメーターを渡したい。ので、今日使うもうひとつの部品は Run Pipeline。手動で実行するボタン。再実行じゃなくて、新規実行ね。
CircleCI って手動実行できないイメージあったんだけど、今年の6月に実行できるようになったみたい。へー。
CircleCI Cloud の「パイプラインの手動実行ボタン (manual pipeline run button)」を試す
この記事のころはパラメーター指定のダイアログがでてなかったけど、今はでるようになってる。8月の更新で入ったみたい: CircleCI に関する最新情報 - CircleCI
手動でのパイプラインの実行に対するパラメーターの追加
UI から手動でパイプラインを実行する際に1つまたは複数のパラメーターを追加できるようになりました。
触ってみた感じ、もうちょっと画面でパラメータを使いやすくなると便利そうかなぁ。config.yml のパイプラインパラメーターの定義とデフォルト値を読んでフォームを作ってくれたらとても良さそうな予感。今後に期待。
ともあれ Run Pipeline でパラメータを渡せそうなので、これを使う。
今日の遊び
はい。この Dynamic Configuration と Run Pipeline を使って「設定ファイルを選んで実行」をやってみた。
Dynamic Configuration を有効化
まずは「このプロジェクトでは Dynamic Configuration を使うよー」って言っとく必要があるみたいなので、オンにした
https://circleci.com/docs/ja/2.0/dynamic-config/#getting-started-with-dynamic-config-in-circleci
簡単な構成
❯ tree .circleci .circleci ├── config.yml ├── config1.yml └── config2.yml
config.yml
に Dynamic Configuration の設定を書いて、実行時に config1.yml
を使うか config2.yml
を使うかを指定するようにしてみる。
Dynamic Configuration の設定
ここに書いてある例を見ながら
https://circleci.com/docs/ja/2.0/configuration-cookbook/?section=examples-and-guides#a-basic-example
最終的には、こんな感じにした
version: 2.1 setup: true orbs: continuation: circleci/continuation@0.1.2 # 実行時に渡すパラメータ # config1 だったら config1.yml を、config2 だったら config2.yml を使って実行する parameters: config: type: enum enum: ["", config1, config2] default: "" # push 手動実行時以外は動かないようにしてみたかったので空文字をデフォルトにしておいた jobs: setup: executor: continuation/default steps: - checkout - continuation/continue: # ここでパラメータを使ってる configuration_path: .circleci/<< pipeline.parameters.config >>.yml workflows: setup: # パラメータを指定したときだけ動くようにしといた when: << pipeline.parameters.config >> jobs: - setup
config1.yml と config2.yml
config1.yml と config2.yml はどっちも Hello World そのままで、それぞれワークフローの名前が say-hello-workflow1
と say-hello-workflow2
になってるだけ。
一箇所だけ、ふむーってなったのが、パラメータのところ。今回、パラメータは setup のときにだけ使ってるんだけど、どうもそこで使ったパイプラインパラメータが、この config1 と 2 を実行するときにも渡されるみたいで、「定義されてないパラメータを受け取ったよ!」ってエラーになってしまう。ので仕方なしに、こっちの config にもパラメータを定義しておいた。
version: 2.1 # 怒られるから定義だけしといた parameters: config: type: enum enum: ["", config1, config2] default: "" jobs: say-hello: docker: - image: cimg/base:stable steps: - checkout - run: name: "Say hello" command: "echo Hello, World2!" workflows: say-hello-workflow1: # config2.yml は say-hello-workflow2 という名前になってるだけ jobs: - say-hello
setup で使ったパイプラインパラメータを、実際に実行するときにまで引き継がないほうが嬉しいかなぁ。もし引き渡したかったら continuation/continue
のパラメータで渡せばいいと思うし。ここも今後に期待かな。
参照: CircleCI Developer Hub - circleci/continuation
push
じゃ、動作確認してみよう。まずは、変更をプッシュしただけだと、実行されない。よし。
からの、実行
書いて説明するよりこっちのがはやいかと思ったのでスクリーンキャストにしておいた
ヽ(=´▽`=)ノ
まとめ
- Dynamic Configuration わりと面白い
- ファイルを指定して手動実行ができると、例えばデプロイを別の設定ファイルに書いといて、他の設定との衝突とかを全く気にせずに書けて便利だったりするかもしれない?
- パラメータを指定する UI のところと、Dynamic Configuration でパラメータが引き継がれてしまうところに対して、自分の意見をフィードバックしておこうかな
面白かった。