Hudson/Jenkins Git 构建所有分支
Posted
技术标签:
【中文标题】Hudson/Jenkins Git 构建所有分支【英文标题】:Hudson/Jenkins Git build all branches 【发布时间】:2013-02-27 00:07:58 【问题描述】:我们有很多开发人员正在创建我想要构建的功能分支。每晚我们运行一个需要在每个分支上运行的代码质量工具。我也不喜欢静态配置,因为分支的数量每隔几周就会发生变化。
【问题讨论】:
【参考方案1】:在 Git 配置中有一个字段'分支说明符(默认为空白):' 如果你把**放在那里,它将从所有遥控器构建所有分支。
您可以使用环境变量 $GIT_BRANCH 例如使用https://wiki.jenkins-ci.org/display/JENKINS/Build+Name+Setter+Plugin 为构建设置标题或用于其他目的
【讨论】:
这将在所有分支被提交时构建它们。但是,我想在特定时间构建所有分支。 嗯,所以你想建立一个分支......没有任何变化?这不是一件很典型的事情,因为我们应该让相同的代码在第二天以同样的方式工作。您可能会成功选择“构建前清除工作区”。 Jenkins 不会跟踪以前的构建,也许它会尝试构建所有分支,就像它为新工作所做的那样。 即使没有代码更改,日复一日地构建相同的分支也经常会遇到与时间相关的错误 - 例如当它们在每个月的第一天出现时,或者当月亮渐亏时。 不仅如此,确保所有分支仍然针对可能更改的外部依赖项进行构建,包括工具链和基础系统在内的构建环境没有腐烂,包括外部演化数据在内的集成测试仍然有效等等。定期构建只是确保事情总是在你需要的时候建立并不是一个坏主意 这只会构建一个你推送的分支【参考方案2】:我有同样的问题要解决。具体来说,制作所有分支的 zip 文件,并将其作为工件提供以用于不同的测试作业。
在“要构建的分支”中,输入“**”
然后,执行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
【讨论】:
我为此给了你+1:git branch -r | grep -v "头->" | xargs -L 1 |剪切 -d'/' -f2.【参考方案3】:老问题,但更合适的答案。下面的多分支插件允许您创建一个构建项目类型,将子项目与分支分开,自动将配置从顶层同步到子项目
https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin
2021 年更新此插件被标记为已弃用
此插件已弃用。请移步Multibranch Pipeline job type.
对于更复杂的方法,Seed 插件为您提供了很大的灵活性来定义子作业
https://github.com/jenkinsci/seed-plugin/wiki
【讨论】:
我喜欢这个插件。但是,它已被Pipeline Multibranch Plugin 正式取代。就个人而言,我认为 Jenkinsfile 的“管道即代码”被夸大了而且令人沮丧。【参考方案4】:分支说明符的 ** 将针对所有分支和所有标签运行。如果您只想要分支,请使用 refs/heads/* 的分支说明符
【讨论】:
以上是关于Hudson/Jenkins Git 构建所有分支的主要内容,如果未能解决你的问题,请参考以下文章
用于 C++ 持续集成的 buildbot vs hudson/jenkins
持续集成(CI)工具------Hudson/Jenkins(Continuous Integration)安装与配置具体解释
Ansible 可以替代像 Hudson/Jenkins 这样的 CI 工具吗?
在使用像 Hudson/Jenkins 这样的 CI 工具时,我如何成功地将 Maven 发布插件与 GitHub(或 GitHub 企业)一起使用