我目前正在 AWS 中配置托管在 Docker 容器上的 Jenkins 服务器。
我正在使用蓝海来配置存储库。
现在,管道会扫描存储库上的所有分支以检测 Jenkinsfiles,然后在检测到更改时自动在该分支上构建。我每 5 分钟扫描一次存储库以检测更改。
但是,如果它是一些随机功能分支,我不想自动运行构建和作业。我试图将自动触发的构建限制为仅对暂存和主分支的更改。
所以我的问题是,您如何/在哪里配置 Jenkins GitHub 管道以仅在某些分支上构建而不是扫描所有分支?
多分支管道作业是你的朋友。
与其试图限制 Jenkins 首先轮询哪些分支,我在 Jenkinsfile 中所做的是每分钟轮询源代码控制:
triggers { pollSCM('* * * * *') }
这将轮询每个分支并创建一个作业,在该作业中,它会在多分支管道作业配置中指定的位置和名称中找到 Jenkinsfile。
旁注
关于多分支管道中的唯一配置是:
- SCM 存储库在哪里?
- 工作区相对路径和 Jenkinsfile 的名称。(如果你愿意,你可以叫它鲍勃(
多分支管道作业设置一个额外的环境变量:BRANCH_NAME允许您在管道中按条件执行操作,如下所示:
script {
if( "${env.BRANCH_NAME}" == "integration" ) {
//Do something useful
}
}
使用此方法,您还可以决定不执行任何操作来响应轮询事件。
我假设你正在使用github插件。我建议使用通用 Webhook 触发器插件在您的存储库上配置 Webhook - https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin
这个插件很棒,可让您轻松提取传入 webhook 中的值并在管道中使用它们。例如,您可以从 webhook 的来源中提取分支,并且仅在分支staging
或master
时才构建
在我们的设置中,我们使用一个简单的作业"webhook 触发器处理器",它从所有存储库读取传入的 webhook,并使用从 webhook 中提取的值触发下游管道。
管道接受输入参数。因此,您可以创建一个名为branch的参数。
在管道中,您可以使用正则表达式仅匹配所需的分支。