Jenkins:标记分支时构建

时间:2016-11-01 18:26:05

标签: git jenkins

(Git newcomer here)我正在尝试实现一个系统,当标签被推送到特定分支时触发Jenkins构建。目前,我的主管安装了一个简单的PoC,在我们的API服务器(运行node.js)上,每5分钟运行一次cron作业:

git checkout production
git pull
git checkout `git describe --abbrev=0 --tags`

因此,当开发人员想要将更改推送到生产时,他们只需运行npm version patch,使用新版本号标记最新提交,然后使用git push origin --tags推送更改。然后,他们通过Jenkins运行一个脚本,重新启动API盒上的所有API服务。

因此,为了模拟它并使其完全自动化,我希望有一个Jenkins工作,当它检测到我们的production分支已被标记为新版本时,它会完成所有这些(加上一些额外的工作)。

这可能吗?我发现的大多数文档都涉及触发推送到repo的任何标记的构建。我想在指向特定仓库的提交的标签上触发。

我很确定这是一个高级案例,我可以编写一些脚本代替它,但我正在尝试学习Jenkins和git的最佳实践,我不想最终坚持一些反模式。

1 个答案:

答案 0 :(得分:0)

没有线索 Jenkins实际上是如何被使用的,所以这个答案可能毫无用处。

但是,在Git中,如果您计划使用这样的分离式HEAD,您只需要在获取之前运行git describe两次,然后运行一次:

otag=$(git describe --tags --abbrev=0 origin/production) ||
    die "help, no initial tag"
git fetch origin
ntag=$(git describe --tags --abbrev=0 origin/production) ||
    die "help, no new tag"
if [ "$otag" = "$ntag" ]; then
    echo the tag we would check out now is the same as the one
    echo we checked out last time, so we do nothing
else
    echo moving from tag: $otag to tag: $ntag
    git checkout $ntag
    ... build ...
fi

git describe允许您指定要描述的提交,因此无需检查分支,获取和合并并希望它快速前进。

请注意,这允许本地分支production逐渐变得越来越过时,甚至根本不存在,因为本地分支从未真正使用过。它在您的示例代码中唯一给出的是它的上游设置。