OpenShift 3.11中基于GitHub Webhook触发的BuildConfig如何实现文件/目录过滤触发?
实现OpenShift 3.11 BuildConfig基于文件/目录变更的触发过滤
当然支持!你完全不用依赖Jenkinsfile里的过滤逻辑来实现这个需求——OpenShift 3.11的GitHub Webhook触发的BuildConfig原生就支持基于文件路径的触发控制,不管是只监听特定目录的变更,还是忽略某些文件/目录,都能直接在BuildConfig配置里搞定,比Jenkinsfile的方式简洁太多。
具体配置方法
你需要在BuildConfig的spec.triggers部分,针对GitHub类型的触发器添加paths配置项,通过include和exclude字段来定义触发规则:
1. 仅在特定目录变更时触发构建
比如你只想让src/目录下的任何文件变更触发构建,可以这么配置:
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: your-build-config spec: triggers: - type: GitHub github: secret: your-webhook-secret # 保持和GitHub Webhook配置的secret一致 paths: include: - "src/**/*" # glob模式,匹配src下所有子目录和文件 # 其他BuildConfig配置...
2. 忽略特定文件/目录的变更
如果要忽略docs/目录和根目录的README.md文件,不让这些变更触发构建,配置如下:
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: your-build-config spec: triggers: - type: GitHub github: secret: your-webhook-secret paths: exclude: - "docs/**/*" - "README.md" # 其他BuildConfig配置...
3. 混合使用include和exclude
你也可以同时设置include和exclude,比如监听src/目录但排除其中的test/子目录:
paths: include: - "src/**/*" exclude: - "src/test/**/*"
关键注意事项
- 路径匹配采用glob模式:
*匹配任意字符(不含路径分隔符),**匹配任意层级的子目录和文件。 - 这个过滤逻辑是OpenShift直接处理的,不需要经过Jenkins,触发判断更高效,也不用在Pipeline里写额外的过滤代码。
- 要确保GitHub上的Webhook已经正确指向你的OpenShift集群,并且Webhook的secret和BuildConfig里配置的完全一致,否则触发器可能无法正常工作。
为什么不用contextDir?
你提到的contextDir只是指定构建的工作目录,它不会影响Webhook的触发逻辑——哪怕你设置了contextDir,只要仓库里其他目录的文件变更,Webhook还是会触发构建。而上面的paths配置是直接在触发层面做过滤,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user2501711
相关产品推荐
相关产品推荐

