Hudson/Jenkins Git构建所有分支

38

我们有许多开发人员正在创建功能分支,我想要构建这些分支。每晚我们会运行一个代码质量工具需要在每个分支上运行。同时,我不希望使用静态配置,因为分支数量每隔几周就会改变。

4个回答

42
在Git配置中,有一个字段叫做“分支规范(默认为空):”,如果你在那里输入 **,它将构建所有来自所有远程的分支。有了这个,你可以使用环境变量 ${GIT_BRANCH} 来设置构建的标题,例如使用 https://wiki.jenkins-ci.org/display/JENKINS/Build+Name+Setter+Plugin 或者其他目的。

这将在提交时构建所有分支。然而,我想在特定时间构建所有分支。 - babsher
嗯,你想构建那个分支...它没有任何更改?这不是一个非常典型的做法,因为我们应该让相同的代码在第二天也能正常工作。你可以尝试选择“在构建之前清除工作区”。Jenkins将不会跟踪以前的构建,也许它会像对待新任务一样尝试构建所有分支。 - Tomasz Bartczak
13
即使没有代码更改,每天构建相同的分支通常也会捕获与时间有关的错误 - 例如,在每个月的第一天或月亮弯月时出现的错误。 - mkirk
4
除此之外,还需确保所有分支都能够构建成功,即使外部依赖项可能已经更改;构建环境包括工具链和基础系统没有过时;集成测试中包括不断演变的外部数据仍然有效等等。定期进行构建以确保在需要时一切都能正常构建并非坏主意。 - kert
这将只构建您推送的一个分支。 - KunMing Xie

7

我有同样的问题需要解决。具体来说,需要将所有分支制作成压缩文件,并将其作为构件提供给不同的测试任务。

在“要构建的分支”中输入“**”。

然后,在“执行 shell”中执行以下命令:

while read -ra ITEM; do
  for i in "${ITEM[@]}"; do
    git checkout $i
    <do your stuff>
  done
done <<< $(git branch -r | grep -v "HEAD ->" | xargs -L 1 | cut -d'/' -f2)

这个命令读取分支列表,逐个检出每个分支,并允许在每个分支中进行操作。 "<<<" 命令将其输出转换为以下格式:
  origin/HEAD -> origin/master
  origin/branch1
  origin/master
  origin/secondbranch

将其转化为可用的结账列表:
branch1
master
secondbranch

我为你点赞,因为这个命令很实用:git branch -r | grep -v "HEAD ->" | xargs -L 1 | cut -d'/' -f2。 - Adeel Ahmad

2

使用 ** 分支说明符将针对所有分支和标签运行。如果只想要分支,请使用 refs/heads/* 分支说明符。


2

虽然这是一个老问题,但下面的多分支插件可以帮助您创建一种构建项目类型,该类型会将分支的子项目扇出,并自动从顶层同步配置到子项目。

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

更新2021:此插件已被标记为弃用。

该插件已被弃用。请转移到Multibranch Pipeline job type.

对于更复杂的方法,Seed插件可为您定义子作业提供了很大的灵活性。

https://github.com/jenkinsci/seed-plugin/wiki


1
当这个插件工作时,我很喜欢它。然而,它已经被 Pipeline Multibranch Plugin 正式取代。就个人而言,我认为 Jenkinsfile 的“管道即代码”被过度炒作了,让人感到沮丧。 - Mike D

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