CircleCI Cloud の matches 使ってみた
これ。タグやブランチ名でワークフローやステップをスキップできるとかできないとか
'matches' logical statement in config
A new logical statement has been added to the config called ‘matches’, which takes a map with two parameters: ‘pattern’ and ‘value’. If the value is a regex match to ‘pattern’, the value will be returned as ‘true’. This type of regex matching in ‘when’ statements enables customers who want to filter individual steps or entire workflows based upon ‘branch’ or ‘tag’ to do so in a more consistent way that matches whatever logic they want to use.
For more information about this addition to the configuration, refer to the CircleCI Configuration Reference documentation, which can be found here:
Using ‘when” in workflowsYou may also refer to the following Canny post, which is resolved by this feature:
Branch filtering on workflow level
- configに
matches
文が追加された -
mathes
はpattern
とvalue
の2つのパラメータを持つ -
value
がpattern
と正規表現で一致する場合true
が返される -
when
文でmatches
を使うことで branch や tag に基づいて個々のステップやワークフロー全体をフィルタリングできる - 設定の詳細はUsing ‘when” in workflowsを見てね
- また、次の問題が解決されたよ。Branch filtering on workflow level
(協力:DeepLくん)
exampleを参考に以下のようなconfig.ymlを作成。
version: 2.1
jobs:
try-matches:
machine:
image: ubuntu-2004:202010-01
steps:
- run: "echo Hello mathces!"
workflows:
try-matches:
when:
matches:
pattern: "^try-matches$"
value: << pipeline.git.branch >>
jobs:
- try-matches
push
なんか怒られてる...
Incorrect type. Expected "string".
うーんどういうこった?
なるほど。ヒントはcircleciにあった。
Max number of workflows exceeded.
これは Setup Workflow を有効にしていると起こるエラー。Setup Workflowでは最大1つのワークフローしか実行できない。
"Max number of workflows exceeded." error – CircleCI Support Center
上のconfig.ymlは実は完全なものではなく、本当は以下のようなymlを書いてた。
version: 2.1
setup: true
orbs:
path-filtering: circleci/path-filtering@0.0.2
jobs:
try-matches:
machine:
image: ubuntu-2004:202010-01
steps:
- run: "echo Hello mathces!"
workflows:
setup-workflow:
jobs:
- path-filtering/filter:
config-path: .circleci/go.yml
mapping: |
go/helloworld/.* go-helloworld true
try-matches:
when:
matches:
pattern: "^try-matches$"
value: << pipeline.git.branch >>
jobs:
- try-matches
なんでsetup-workflowなんかがあるかというと以前実験したから
CircleCI Cloudのpath-filteringを試してみる
try-matches
ブランチでコミットしてpush
ちゃんとtry-matches
ワークフローが実行された https://app.circleci.com/pipelines/github/korosuke613/playground/23/workflows/be2149f3-e91d-4e9b-b0b9-507324cf161f/jobs/47
今度はstep単位でmatchesしてみる
try-matches:
machine:
image: ubuntu-2004:202010-01
steps:
- run: "echo Hello mathces!"
+ - when:
+ matches:
+ pattern: "^main$"
+ value: << pipeline.git.branch >>
+ run: "echo Hello matches with step"
+ - run: "Done!!"
おっと...
steps.whenの書き方間違えてた。
steps.when.stepsにする必要があった。
try-matches:
machine:
image: ubuntu-2004:202010-01
steps:
- run: "echo Hello mathces!"
- when:
condition:
matches:
pattern: "^main$"
value: << pipeline.git.branch >>
steps:
- run: "echo Hello matches with step"
- run: "echo Done!!"
mainブランチじゃないと実行されないが果たして...?
おおー実行されてない。ていうかなんかなかったことにされてる。せめてスキップしましたくらい言ってほしい気はするけど
最後にmainにマージしてワークフローが実行されないことを確認する。
しっかりされなかった。
楽にワークフローをスキップできていいっすね。ていうかこれ使ってがんばればpath-filtering
いらない説...?setup workflow使わなくて済むし。まあにしてもがんばる必要があるか