Closed9

CircleCI Cloud の matches 使ってみた

Futa HirakobaFuta Hirakoba

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 workflows

You may also refer to the following Canny post, which is resolved by this feature:
Branch filtering on workflow level

  • configにmatches文が追加された
  • mathespatternvalueの2つのパラメータを持つ
  • valuepatternと正規表現で一致する場合trueが返される
  • when文でmatchesを使うことで branch や tag に基づいて個々のステップやワークフロー全体をフィルタリングできる
  • 設定の詳細はUsing ‘when” in workflowsを見てね
  • また、次の問題が解決されたよ。Branch filtering on workflow level

(協力:DeepLくん)

Futa HirakobaFuta Hirakoba

exampleを参考に以下のようなconfig.ymlを作成。

.circleci/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".

うーんどういうこった?

Futa HirakobaFuta Hirakoba

なるほど。ヒントはcircleciにあった。

Max number of workflows exceeded.

これは Setup Workflow を有効にしていると起こるエラー。Setup Workflowでは最大1つのワークフローしか実行できない。

"Max number of workflows exceeded." error – CircleCI Support Center
https://support.circleci.com/hc/en-us/articles/360060934851--Max-number-of-workflows-exceeded-error

上のconfig.ymlは実は完全なものではなく、本当は以下のようなymlを書いてた。

.circleci/config.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を試してみる
https://zenn.dev/korosuke613/scraps/74e6ccaf6f8b67

Futa HirakobaFuta Hirakoba

今度はstep単位でmatchesしてみる

.circleci/config.yml
  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!!"

おっと...

Futa HirakobaFuta Hirakoba

steps.whenの書き方間違えてた。
steps.when.stepsにする必要があった。

.circleci/config.yml
  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ブランチじゃないと実行されないが果たして...?

https://app.circleci.com/pipelines/github/korosuke613/playground/27/workflows/80c41798-951d-4ce0-b44f-2187f05e281b/jobs/57

おおー実行されてない。ていうかなんかなかったことにされてる。せめてスキップしましたくらい言ってほしい気はするけど

Futa HirakobaFuta Hirakoba

最後にmainにマージしてワークフローが実行されないことを確認する。

しっかりされなかった。

Futa HirakobaFuta Hirakoba

楽にワークフローをスキップできていいっすね。ていうかこれ使ってがんばればpath-filteringいらない説...?setup workflow使わなくて済むし。まあにしてもがんばる必要があるか

このスクラップは2021/05/15にクローズされました