我正在尝试用Hudson替换我们当前的Buildbot设置.我安装了git插件.我们目前的设置如下:
ssh://server:/repo/test_framework.git ssh://server:/repo/project_a.git
现在,为了构建,project_a
我添加了一个包含多个git存储库的新作业(上面的那些).我希望Hudson将存储库克隆到不同的目录下$WORKSPACE
,因为test_framework
需要层次结构.但哈德森似乎将所有内容合并$WORKSPACE
而来.从控制台日志:
warning: no common commits ... [workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 96d2b3c27595de243702414c4358366923696d78 [workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 5bb011b3fa288afd5e4392640b32b8bcc982103e [workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 aa6ade81669883909ba5f5459a205df1bd0df3c0
我可以在Hudson中配置它以更好地适应我们的项目设置吗?我是否需要创建一个本地虚拟git存储库,每个项目都作为git子模块或其他东西?
在Hudson中,您可以将多个工作链接在一起.您可以尝试为test_framework创建单独的Hudson作业,为project_a创建另一个Hudson作业.Hudson在$ WORKSPACE中为每个作业创建一个单独的目录,所以现在你应该在$ WORKSPACE下有两个不同的目录.
设置链接
在project_a的作业配置中,向下滚动到Post-build操作并检查构建其他项目...在test_framework中输入要构建的项目.
在test_framework的作业配置中,确保取消选中 Poll SCM,并将其他项目之后的Build设置为project_a.
这个怎么运作
您现在配置的是project_a将轮询SCM以查找更改,当发现更改时,它将从git中提取它们.运行构建步骤(如果有的话)并在完成时触发test_framework作业以从git(如果有)中提取更改并运行其构建步骤.
"构建其他项目"解决方案的问题在于,如果对test_framework进行了更改,则不会触发project_a构建.相反,我建议放弃git插件并使用以下内容设置"Execute shell"构建步骤:
rm -rf ${WORKSPACE}/* git clone ssh://server:/repo/test_framework.git ${WORKSPACE}/test_framework cd ${WORKSPACE}/test_framework git fetch -t ssh://user@server:/repo/test_framework.git +refs/heads/*:refs/remotes/origin/* git ls-tree HEAD git clone ssh://server:/repo/project_a.git ${WORKSPACE}/project_a cd ${WORKSPACE}/project_a git fetch -t ssh://user@server:/repo/project_a.git +refs/heads/*:refs/remotes/origin/* git ls-tree HEAD
接下来,使用以下内容创建钩子文件"server:/repo/test_framework.git/hooks/post-receive"和"server:/repo/project_a.git/hooks/post-receive":
#!/bin/sh curl http://hudson/job/job_name/build
现在,每当更改被推送到任一存储库时,钩子将使用Hudson的API来触发构建.
我意识到这个问题已经很老了,但我遇到了同样的问题,并使用这个页面充实了我自己的解决方案,似乎工作得非常好(即使它有点令人费解).这个解决方案的大部分功劳应归功于克林顿(唯一的原因是我很难提交这个答案,因为他的回答似乎并不能解决需要在同一个基本目录中的多个存储库).
假设您有两个存储库(A和B).
脚步:
1)创建两个项目以从远程存储库A和B中提取代码.在任一存储库中放置任何必要的构建步骤.
2)创建第三个目录,不进行任何源代码管理.向此项目添加构建步骤以执行类似于以下的shell命令:
ln -s /var/lib/jenkins/jobs/A/workspace A ln -s /var/lib/jenkins/jobs/B/workspace B
(你的路径可能不一样.自己查一下!)
现在,您可以添加依赖于A和B作为目录中姐妹的任何其他构建步骤.Yay象征性的链接!
3)将三个任务链接在一起.拉任务的顺序可能重要也可能没重要(你比我更了解)但没有源控制的任务应该是链中的最后一个链接.