将多个git repos签出到同一个Jenkins工作区

时间:2013-02-12 23:19:17

标签: git jenkins

使用Jenkins 1.501和Jenkins Git插件1.1.26

我有3个不同的git repos,每个都有多个项目。

现在我需要将3 git repos中的所有项目签出到Jenkins slave上的相同工作区。我已经定义了每个git repo:源代码管理:多个SCM 。但每次签出回购时,前一个回购(及其相关项目)都会被删除。

我读过这个:

http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html

但它并没有真正帮助。我试图在所有回购的本地子目录下为repo(可选)指定相同的文件夹,但它会给出相同的结果。

如果使用Jenkins这根本不可能,我想可以使用一些预构建步骤/脚本来将项目移动到正确的位置。它不是修改项目构建配置的选项。

9 个答案:

答案 0 :(得分:76)

使用多个SCM插件:

  • 为您需要结帐的每个存储库创建不同的存储库条目(主项目或依赖项目。

  • 对于每个项目,在“高级”菜单(第二个“高级”菜单中,每个存储库有两个标记为“高级”的按钮),找到“repo(可选)的本地子目录”文本字段。您可以在“workspace”目录中指定要将项目复制到的子目录。您可以映射我的开发计算机的文件系统。

“第二个高级菜单”不再存在,而是需要做的是使用“添加”按钮(在“附加行为”部分),然后选择“签出到子目录”< / p>

  • 如果您正在使用ant,现在build.xml文件的构建目标不在工作区的根目录中但在子目录中,则必须在“Invoke Ant”配置中反映出来。为此,在“调用ant”中,按“高级”并填写“构建文件”输入文本,包括build.xml所在子目录的名称。

希望有所帮助。

答案 1 :(得分:63)

使用Jenkins + Git插件无法在单个工作区中一次检出多个repo。

作为一种解决方法,您可以拥有多个上游作业,每个作业都会检出一个仓库,然后复制到最终的项目工作区(有多个级别有问题),或者您可以设置一个shell脚本步骤来检查每个在构建时需要回购作业工作区。

以前,Multiple SCM插件可以帮助解决此问题,但现在已弃用。在Multiple SCM插件页面中:“用户应该迁移到https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin。管道提供了一种更好的方法来检查多个SCM,并得到Jenkins核心开发团队的支持。”

答案 2 :(得分:30)

由于Multiple SCMs Plugin已被弃用。

使用Jenkins Pipeline可以签出多个git repos并在使用gradle构建之后

GET    /recovery         controllers.application.recovery()
GET    /signup           controllers.application.signup(lang="sv")
GET    /<:lang>/signup   controllers.application.signup(lang: String)

您可能需要考虑使用git submodules而不是像这样的自定义管道。

答案 3 :(得分:19)

我成功地将Multiple SCMs Plugin与Git插件一起用于Jenkins。

答案 4 :(得分:5)

根据存储库的关系,另一种方法是将其他存储库(存储库)作为git submodules添加到其中一个存储库。 git子模块创建对其他repos的引用。除非您在克隆&#34; superproject&#34; (官方术语)时指定--recursive标记,否则不会克隆这些子模块存储库。

这是将子模块添加到当前项目中的命令:

git submodule add <repository URI path to clone>

我们正在使用Jenkins v1.645,并且git SCM将开箱即用,为超级项目执行递归克隆。您可以在同一个Jenkins作业工作区中的各自目录中获取超级项目文件和所有相关(子模块)repo文件。

不保证这是正确的方法,而不是它的方法。

答案 5 :(得分:4)

詹金斯: 多个SCM-已弃用。 GIT插件-不适用于多个存储库。

将脚本/管道作为代码-是必经之路。

答案 6 :(得分:1)

我也有这个问题。我在其他项目上使用Trigger / call构建解决了该问题。对于每个存储库,我使用参数调用下游项目。

主要项目:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

然后对于每个存储库,我将其称为下游项目:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

下游项目:Linux-Tag-Checkout:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 

答案 7 :(得分:0)

我们正在使用git-repo来管理我们的多个GIT存储库。还有一个Jenkins Repo plugin允许将git-repo管理的全部或部分存储库签出到同一个Jenkins作业工作区。

答案 8 :(得分:0)

使用Jenkins + Git插件一次可以在一个工作空间中一次签出多个回购 (也许仅在较新的版本中?)。

在“源代码管理”部分中,不要选择“ Git”,而要选择“多个SCM”并添加几个git存储库。

请确保将除“添加到子目录”之外的所有操作添加为“其他行为”,并指定一个子目录。