当前位置:  开发笔记 > 运维 > 正文

使用Hudson并使用多个git存储库构建步骤

如何解决《使用Hudson并使用多个git存储库构建步骤》经验,为你挑选了3个好方法。

我正在尝试用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子模块或其他东西?



1> Clinton..:

在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(如果有)中提取更改并运行其构建步骤.



2> 小智..:

"构建其他项目"解决方案的问题在于,如果对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来触发构建.


这会在每一个版本中重新克隆吗?

3> Peter Enns..:

我意识到这个问题已经很老了,但我遇到了同样的问题,并使用这个页面充实了我自己的解决方案,似乎工作得非常好(即使它有点令人费解).这个解决方案的大部分功劳应归功于克林顿(唯一的原因是我很难提交这个答案,因为他的回答似乎并不能解决需要在同一个基本目录中的多个存储库).

假设您有两个存储库(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)将三个任务链接在一起.拉任务的顺序可能重要也可能没重要(你比我更了解)但没有源控制的任务应该是链中的最后一个链接.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有