んだけど、わけあって(おい!)ちゃんと勉強しようと思ったので、ひととおりドキュメントに目を通して、この本をさらっと読んだ。想像してたよりも新しい情報が説明されていてとても良い本でした。
そんなわけで、
知らない人もいると思うのでちゃんと書いておくと「完全に理解した」は「入門したぞー!」って意味ね。まぁ、↓の左の人は本当に完全に理解してると思うけど(もちろん右の人も)
「完全に理解した」と「チヨットデキル」Tシャツを着る弊社の愉快な経営陣🤣(左CEO Jim Roseと右CTO Rob Zuber)pic.twitter.com/RXM62p4msy
— CircleCI Japan (@CircleCIJapan)December 7, 2018
雰囲気は分かったので、実際に触りはじめることにする。今日は2つの部品で遊んでみた。
最初の部品は Dynamic Configuration。設定ファイルを動的に生成して使うことができる。この記事で知った:
Dynamic Configurationを使って.circleci/config.ymlを分割する
この記事では、config.yml を分割して管理しておいて、実行時にファイルをyq
でマージしてる。なるほどなー。分割できるのはとても良さそう。
記事の中ではyq
をインストールしてるけど、手元で確認してみたら最初からイメージに入ってそう。最近追加されたのかもしれない?
❯ docker run --platform linux/x86_64 -ti --rm cimg/base:stable yq --versionyq (https://github.com/mikefarah/yq/) version 4.13.3
なんとなく雰囲気は分かったので、実際に自分でやってみたらどういう感じなのか確かめてみよう。まねしてファイルを分割してもいいけど、せっかくなのでちょっとだけ違う方向で「設定ファイルを選んで実行」みたいなのやってみようかな。
「設定ファイルを選んで実行」をやろうと思ったら実行時にパラメーターを渡したい。ので、今日使うもうひとつの部品は 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 を使うよー」って言っとく必要があるみたいなので、オンにした
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
を使うかを指定するようにしてみる。
ここに書いてある例を見ながら
https://circleci.com/docs/ja/2.0/configuration-cookbook/?section=examples-and-guides#a-basic-example
最終的には、こんな感じにした
version:2.1setup:trueorbs:continuation: circleci/continuation@0.1.2# 実行時に渡すパラメータ# config1 だったら config1.yml を、config2 だったら config2.yml を使って実行するparameters:config:type: enumenum:["", config1, config2]default:"" # push 手動実行時以外は動かないようにしてみたかったので空文字をデフォルトにしておいたjobs:setup:executor: continuation/defaultsteps:-checkout-continuation/continue: # ここでパラメータを使ってるconfiguration_path: .circleci/<< pipeline.parameters.config >>.ymlworkflows:setup: # パラメータを指定したときだけ動くようにしといたwhen: << pipeline.parameters.config >>jobs:-setup
config1.yml と config2.yml はどっちもHello World そのままで、それぞれワークフローの名前がsay-hello-workflow1
とsay-hello-workflow2
になってるだけ。
一箇所だけ、ふむーってなったのが、パラメータのところ。今回、パラメータは setup のときにだけ使ってるんだけど、どうもそこで使ったパイプラインパラメータが、この config1 と 2 を実行するときにも渡されるみたいで、「定義されてないパラメータを受け取ったよ!」ってエラーになってしまう。ので仕方なしに、こっちの config にもパラメータを定義しておいた。
version:2.1# 怒られるから定義だけしといたparameters:config:type: enumenum:["", config1, config2]default:""jobs:say-hello:docker:-image: cimg/base:stablesteps:-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
じゃ、動作確認してみよう。まずは、変更をプッシュしただけだと、実行されない。よし。
書いて説明するよりこっちのがはやいかと思ったのでスクリーンキャストにしておいた
ヽ(=´▽`=)ノ
面白かった。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。