(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的最佳实践,我不想最终坚持一些反模式。
答案 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
逐渐变得越来越过时,甚至根本不存在,因为本地分支从未真正使用过。它在您的示例代码中唯一给出的是它的上游设置。