Jenkins - 如何构建特定分支

134
这不仅仅是一个简单的参数化构建。我已经有了一个特定的构建流程,只要这些分支中的任何一个被推送到GitHub,就会进行构建和部署。

enter image description here

如果我刚刚推送了`develop`并且构建成功,我如何触发手动构建并让它拉取`feature/my-new-feature`(而不进行`git push`)?我尝试启用参数化构建,添加一个名为`branch`的新字符串,然后添加一个新的分支指定符`*/$branch`。然后我运行了一个构建,并将`branch`设置为`feature/my-new-feature`,但它仍然从`develop`拉取。

你是在说Github Webhook吗?这可能会解决你的问题。你想从Github触发它吗? - Abhijeet Kamble
1
不,GitHub集成已经可以使用了。我需要知道如何手动构建特定的分支。 - ffxsam
4
我有同样的问题。这份工作配置为构建不同的分支,并由Git钩子触发。但是当我想手动构建特定的分支(没有新的Git更改)时,我会点击“立即构建”,但它总是构建最新选中的分支。我也尝试了各种构建属性。 - cornz
1
@Alexey,但是在自动启动的构建过程中,这个$branch将会变成一个空字符串,我想。 - Nakilon
是否有分支特定的构建,例如仅在 feature/** 或 hotfix/** 分支提交时构建,而不是在 develop 分支提交时构建? - Pratik Anand
显示剩余7条评论
9个回答

168
最佳解决方案可以是:
在现有的作业中添加一个字符串参数 enter image description here 然后在“源代码管理”部分更新“要构建的分支”以使用您定义的字符串参数:enter image description here 如果您看到一个标有“轻量级检出”的复选框,请确保取消选中。
图像中的配置将告诉Jenkins作业使用“master”作为默认分支,并且对于手动构建,它将要求您输入分支详细信息(FYI:默认设置为“master”)enter image description here

4
默认构建主分支并不能满足构建所有开发分支的通用开发构建的要求。 - static_rtti
23
天啊,太糟糕了。为什么 Jenkins 不把 Branches to build (要构建的分支)部分和适用的 Git 代码库一起保存呢?这是一个愚蠢的麻烦事,必须要这样做才能指定要构建的分支。 - Alex Zavatone
10
这样做(对我来说)不起作用。最终导致Jenkins尝试检出一个无效的分支,命令如下:git.exe fetch --tags --progress origin +refs/heads/${BRANCH}:refs/remotes/origin/${BRANCH} --prune - Liam
24
如Bug单中所建议的,您需要取消勾选“轻量级检出”以使其生效。 - asmaier
1
@AlexZavatone 选定分支的变量也可在 Jenkinsfile 和构建脚本中使用。如果它是 SCM 部分的一部分,那么实际上会使某些事情变得更加复杂。但是,总的来说,如果 Jenkins 从头开始重新设计,使用起来会更加愉快。 - Petr Gladkikh
显示剩余8条评论

14

要通过Jenkins脚本检出分支,请使用:

stage('Checkout SCM') {
    git branch: 'branchName', credentialsId: 'your_credentials', url: "giturlrepo"
}

3
我知道这跟问题不完全相关,但我在寻找这个信息时,谷歌不停地建议这个网站作为答案。 - Igor L.
同样的问题,兄弟。你找到确切的答案了吗? - thinkingmonster

14

我认为你不能在同一Jenkins任务中完成此操作,你需要配置一个新的Jenkins任务,该任务将使用你的GitHub账号来检索分支,然后你可以手动选择要构建哪一个分支。

只需标记它为参数化构建,指定一个名称,以及一个配置为 git参数 的参数。

enter image description here

现在你可以配置GIT选项:

enter image description here


7
那个 "git parameter" 是 Jenkins 插件吗?我没有看到添加那种参数的选项。如果它是一个插件,你可以在回答中指向它吗? - Leandro David
1
@LeandroDavid 是的,Git Parameter是一个插件,需要安装后才能在“添加参数”下看到此选项。 - gotosachin

6

我看到了很多好的回答,但我仍然想分享这个方法,即使用 Git 参数如下:

添加 Git 参数

在构建流水线时,您将被要求选择分支: 选择要构建的分支

之后通过 Groovy 代码,您可以指定要克隆的分支:

git branch:BRANCH[7..-1], url: 'https://github.com/YourName/YourRepo.git' , credentialsId: 'github' 

注意,我使用了一个从第7个字符到最后一个字符的切片来缩小“origin /”并获取分支名称。

如果您配置了Webhooks触发器,则仍然可以工作,并且会采用您指定的默认分支(在我们的情况下是master)。


1
这是一个 Git Parameter 插件。需要安装它才能从列表中选择分支。更多详情请参见 https://plugins.jenkins.io/git-parameter/。 - Sergey Nemchinov

5
我最终解决了这个问题。您需要连接 Git parameter 插件和 Generic Webhook Trigger 插件。就像这样: 输入图像描述 输入图像描述 输入图像描述 输入图像描述

0

我遇到了同样的问题。 我的Jenkinsfile有几个问题。 例如,在执行release-start时,检出分支是develop。因此,无论我的输入如何,都会使用develop(而我的分支尚未合并到develop中) 另外,尝试像这样添加完整的分支名称。以下是来自帮助选项的描述:

“最安全的方法是使用refs/heads/语法。这样 预期的分支就是明确的。

如果您的分支名称中有/,请确保使用完整的引用 以上。”


0

enter image description here

在构建触发器下将有一个选项可供配置

检查GitHub分支

将创建一个钩子,然后您可以从Jenkins构建任何您喜欢的分支,当您选择github分支enter image description here

希望这能帮到您 :)


我正在尝试将此插件与此设置一起使用,但我找不到让作业启动的方法。是否有其他方法可以检查gh是否正确地发送了事件? - Vito De Tullio
你是否看到了“运行分支触发器”选项,它会扫描git仓库中所有可用的分支...同时,只需查看Jenkins日志->在管理Jenkins下...以查看是否发生了任何错误。 - rohit thomas
1
请详细描述,您的说明太简洁了。 - C.J.

0

这是Ranjith提供的答案的扩展

我建议您选择一个choice-parameter build,并指定您想要构建的分支。 Active Choice Parameter

之后,您可以指定要构建的分支。 Branch to Build

现在,当您构建项目时,将提供“Build with Parameters”,您可以选择要构建的分支

您还可以编写groovy脚本来获取所有处于活动状态的选择参数中的分支。


请详细说明。TeamCity默认可以做到这一点,而Jenkins甚至不能系好自己的鞋带!!! - C.J.

0

你也可以使用正则表达式来实现这个功能 | 表示“或者”

例如下面的例子:

(.*branch1|.*branch2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接