在相同的 Jenkins 工作区检查多个 Git 回购

使用 Jenkins 1.501和 Jenkins Git 插件1.1.26

我有3个不同的 git 回购与多个项目每个。

现在我需要检查所有的项目从3 git 回购到同一个工作空间的詹金斯奴隶。我已经在 源代码管理: 多 SCM中定义了每个 git 回购。但是每次签出一个回购协议,以前的回购协议(及其相关的项目)就会被删除。

我读过这个:

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

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

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

200051 次浏览

使用 Jenkins + Git Plugin 在一个工作区中一次检查多个回购是不可能的。

作为一个解决方案,你可以有多个上游工作,每个工作签出一个回购,然后复制到最终的项目工作空间(在一些层面上有问题) ,或者你可以设置一个 shell 脚本步骤,在构建时检查每个需要的回购到工作工作空间。

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

我与 Jenkins 成功地结合使用了 多单片机插件和 Git 插件。

使用多 SCM 插件:

  • 为需要签出的每个存储库(主项目或依赖项目)创建不同的存储库条目。

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

“第二个高级菜单”已经不存在了,取而代之的是需要做的是使用“添加”按钮(在“附加行为”部分) ,并选择“签出到一个子目录”

  • 如果您正在使用 Ant,就像现在的 build.xml 文件,其构建目标不在工作区的根目录中,而是在一个子目录中,那么您必须在“ Invoke Ant”配置中反映这一点。为此,在“ Invoke ant”中,按“ Advanced”并填充“ Build file”输入文本,包括 Build.xml 所在的子目录的名称。

希望能帮上忙。

我们正在使用 废物回收来管理我们的多个 GIT 存储库。还有一个 詹金斯回购插件允许将 git-repo 管理的所有或部分存储库签出到相同的 Jenkins 作业工作区。

根据存储库之间的关系,另一种方法是将其他存储库(存储库)作为 Git 子模块添加到其中一个存储库中。Git 子模块创建对其他回购协议的引用。除非您在克隆 “超级计划”(正式术语)时指定 --recursive标志,否则这些子模块回购不会被克隆。

下面是在当前项目中添加子模块的命令:

Git 子模块添加 < 存储库 URI 路径以克隆 >

我们使用 Jenkins v1.645,git SCM 将开箱即用,为超级项目做一个递归克隆。瞧,您在相同的 Jenkins 作业工作区中获得了超级项目文件和它们各自目录中的所有依赖(子模块) repo 文件。

不能保证这是 正确方法,而是一种方法。

因为 多单片机插件已被弃用。

使用 詹金斯管道,可以检查多个 git 回购协议,并在建立它使用梯度

node {
def gradleHome


stage('Prepare/Checkout') { // for display purposes
git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'


dir('a-child-repo') {
git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
}


env.JAVA_HOME="${tool 'JDK8'}"
env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
gradleHome = tool '3.4.1'
}


stage('Build') {
// Run the gradle build
if (isUnix()) {
sh "'${gradleHome}/bin/gradle' clean build"
} else {
bat(/"${gradleHome}\bin\gradle" clean build/)
}
}
}

您可能需要考虑使用 Git 子模块而不是像这样的自定义管道。

多个单片机已弃用。 GIT 插件-不适用于多个回购协议。

以代码的形式编写脚本/管道才是正确的选择。

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

主要项目:

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}

使用 Jenkins + Git Plugin (也许只是在最近的版本中)在单个工作区 中一次检查多个回购.

在“ Source-Code-Management”部分,不要选择“ Git”,而是选择“ Multi SCM”并添加几个 Git 存储库。

请确保在所有目录中添加“签出到子目录”操作作为“附加行为”,并指定一个单独的子目录。