限制Jenkins pipeline建哪个分支?

Limit which branch is built by Jenkins pipeline?

我目前正在配置托管在 AWS 中 Docker 容器上的 Jenkins 服务器。

我正在使用 BlueOcean 配置存储库。

现在,管道扫描存储库上的所有分支以检测 Jenkinsfiles,然后如果检测到更改,将自动在该分支上构建。我每 5 分钟扫描一次 repo 以检测更改。

但是,如果它是一些随机功能分支,我不想 运行 自动构建和作业。我正在尝试将自动触发的构建限制为仅在登台和主分支中进行更改。

所以我的问题是,how/where您是否将 Jenkins GitHub 管道配置为仅在某些分支上构建而不是扫描所有分支?

我假设您正在使用 github 插件。我建议使用 Generic Webhook Trigger Plugin 在您的存储库上配置一个 webhook - https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin

这个插件很棒,可以让您轻松提取传入 webhook 中的值并在您的管道中使用它们。对于前。您可以从 webhook 的来源提取分支,并且仅在分支为 stagingmaster

时才构建

在我们的设置中,我们使用了一个简单的作业 'webhook trigger processor',它从所有存储库读取传入的 webhook 并使用从 webhook 中提取的值触发下游管道。

管道接受输入参数。因此,您可以创建一个名为 branch 的参数。

在您的管道中,您可以使用 regex 来仅匹配所需的分支。

多分支管道作业是您的朋友。

与其尝试限制 Jenkins 首先轮询哪些分支,我在 Jenkinsfile 中所做的是每分钟轮询一次源代码控制:

triggers { pollSCM('* * * * *') }

这将轮询每个分支并创建一个作业,它会在您在多分支管道作业配置中指定的位置和名称中找到 Jenkinsfile。

Side Note

About the only configuration in a multibranch pipeline is:

  1. Where's the SCM repo?
  2. Workspace relative path and name of Jenkinsfile. (You can call it Bob if you want)

多分支管道作业设置了一个额外的环境变量:BRANCH_NAME 允许您有条件地在管道中执行操作,如下所示:

script {
    if( "${env.BRANCH_NAME}" == "integration" ) {
        //Do something useful
    }
}

使用此方法,您还可以决定不响应轮询事件。