めあとるーむ日記帳

なんか書く

CircleCIのブランチで動きを制限するFiltersについて

基本も基本でいいところなのだがまあCIの動きはブランチとかコミット内容で条件つけて分岐させたいよねってなるわけで、

で、つまずいちゃったところをまとめておく。日本語資料がないのかググり方が悪いのかそもそも検索エンジンにbingとか使ってるのが悪いのか

あと何を思ったのかSSで解説するのも後ろの方に書いちゃったから(本当になんで)


注意点1 : workflows を使うときは jobs 定義の方のフィルターは使われない

まず一番最初にハマったところ

途中で workflows を使おうとしたからつまずいた感じでもある

ドキュメントにはきっちり書いてあるのでまあちゃんと読んでないのが悪いのだが

circleci.com

注意点2 : workflows の方でブランチを制限するときはたとえフィルターとするブランチが1つでもリストで渡さなければならない

これは最後まで引っかかった。

ちなみに jobs の方でブランチによる制限をかけるときはリストじゃなくてもいい(だから引っかかったのだが)

注意点3 : ブランチの設定に正規表現を使う場合は最初と最後をスラッシュで囲む

最初は正規表現が間違ってるのかと思ってしまったりしたけどこっちだったというやつ


以下よくわからないSS

登場人物 ジョン:CircleCIの設定ファイルで頭を抱えている ボブ:ジョンがわからないところを解決してくれる

「やあジョン、どうしたんだい? 頭を抱えて」

「おおボブ。我が友よ、どうか私のトラブルを解決してくれ」

「わかった。落ち着こう。とりあえずそんな聖書の一文みたいな喋り方はやめよう。で、なにがあったんだい?」

「見てくれよボブ。CircleCI の branches キーの設定で job を操作したいのに出来ないんだ」

version: 2
jobs:
  hello_world:
    docker:
      - image: circleci/buildpack-deps:18.04-curl
    branches:
      only: master
    steps:
      - checkout
      - run: echo "Hello World"

workflows:
  version: 2
  create_document:
    jobs:
      - hello_world

「オーケー。見せてごらん……ふむふむ、これ、workflows を設定してるじゃないか。ちゃんとドキュメントを読んだかい? この設定は workflows を使わないときに有効になるものだ」

circleci.com

「なんてこった! じゃあここで設定するのは意味がなかったということか!?」

「そういうことだ。落ち着いてもう一度言うぞ、workflows の機能を使うときは jobs ごとのフィルター設定は使われない。ついでにいうとそのままだと workflows 機能はエラーを吐くから気をつけるんだ」

「そうだったのか……じゃ、じゃあ workflows の方に filters をかければいいのか。これはどうすればいい?」

「なに、難しいことじゃない。 workflows の jobs で設定できる。 jobs のリストで特に設定がないときはそのままジョブ名を当てればいいが、それぞれに設定をしたいときはリストにジョブ名をキーとしたマップを渡せばいい」

circleci.com

「なるほど……これでいいのか?」

「おっと惜しい。実はこれじゃあダメなんだ」

version: 2
jobs:
  hello_world:
    docker:
      - image: circleci/buildpack-deps:18.04-curl
    steps:
      - checkout
      - run: echo "Hello World"

workflows:
  version: 2
  create_document:
    jobs:
      - hello_world:
        filters:
          branches:
            only: master

「なんだって!? 何が悪いんだい!?」

「落ち着くんだジョン。実は workflows のブランチ設定は only にせよ ignore にせよリストで渡してあげなければならない」

「と、いうことはつまり……」

version: 2
jobs:
  hello_world:
    docker:
      - image: circleci/buildpack-deps:18.04-curl
    steps:
      - checkout
      - run: echo "Hello World"

workflows:
  version: 2
  create_document:
    jobs:
      - hello_world:
        filters:
          branches:
            only:
              - master

「こういうことだね?」

「そう。それでgit pushだ」

「オーケー、いい子だ……頼むからうまく動いてくれよ……動いた! 動いたぞボブ!」

「よかった。ついでに教えておくけど、正規表現で制限したいときは表現の最初と最後にスラッシュを入れることを忘れないように。あと、ドキュメントはちゃんと読むことだ。全部書いてるからね」

「ああ、今度から面倒がらずに読むことにするよ」