我正在為我的 CI/CD 鏈使用 Argo Events 和 Argo Workflow,它工作得非常整潔。但是我在為我的 mono repo的GitHub webhook 有效負載設置數據過濾器時遇到了一些麻煩。如果文件在某個子路徑中發生更改,我試圖讓傳感器僅觸發定義的工作流程。有效負載包含添加、刪除、修改三個字段。那里列出了在此提交中更改的文件(webhook-events-and-payloads#push)。我正在尋找的路徑是service/jobs/*和service/common*/*。我定義的過濾器是: - path: "[commits.#.modified.#(%\"*service*\")#,commits.#.added.#(%\"*service*\")#,commits.#.removed.#(%\"*service*\")#]"
type: string
value:
- "(\bservice/jobs\b)|(\bservice/common*)"我在一個很小的Go腳本中驗證了我的過濾器,因為Argo Events 使用gjson來應用數據過濾器。package mainimport ( "github.com/tidwall/gjson" "regexp")const json = `{ "commits": [ { "added": [ ], "removed": [ ], "modified": [ "service/job-manager/README.md" ] }, { "added": [ ], "removed": [ "service/joby/something.md" ], "modified": [ "service/job-manager/something.md" ] }, { "added": [ ], "removed": [ "service/joby/something.md" ], "modified": [ "service/joby/someother.md" ] } ], "head_commit": { "added": [ "service/job-manager/something.md" ], "removed": [ "service/joby/something.md" ], "modified": [ "service/job-manager/README.md" ] } }`func main() { value := gjson.Get(json, "[commits.#.modified.#(%\"*service*\")#,commits.#.added.#(%\"*service*\")#,commits.#.removed.#(%\"*service*\")#]") println(value.String()) matched, _ := regexp.MatchString(`(\bservice/job-manager\b)|(\bservice/common*)`, value.String()) println(matched) // string is contained?}該腳本給了我預期的結果。但是對于相同的 webhook 有效負載,在將數據過濾器添加到傳感器時不會觸發工作流。有人有什么想法嗎?
1 回答

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
路徑應以
body.
值應添加轉義特殊字符
\\
所以數據過濾器應該是
- path: "[body.commits.#.modified.#(%\"*service*\")#,body.commits.#.added.#(%\"*service*\")#,body.commits.#.removed.#(%\"*service*\")#]" type: string value: - "(\\bservice/jobs\\b)|(\\bservice/common*)"
- 1 回答
- 0 關注
- 89 瀏覽
添加回答
舉報
0/150
提交
取消