![](/img/trans.png)
[英]Using a Jenkins pipeline to checkout multiple git repos into same job
[英]Checkout multiple git repos into same Jenkins workspace
使用 Jenkins 1.501 和 Jenkins Git 插件 1.1.26
我有 3 个不同的 git 仓库,每个仓库都有多个项目。
现在我需要将 3 个 git 存储库中的所有项目签出到 Jenkins 从站上的同一个工作区中。 我在: Source code Management: Multiple SCMs 中定义了每个 git repo。 但是每次检出一个 repo 时,前一个 repo(及其相关项目)都会被删除。
我读过这个:
http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html
但它并没有真正的帮助。 我试图在本地子目录下为所有存储库指定相同的文件夹(可选) ,但它给出了相同的结果。
如果使用 Jenkins 这根本不可能,我想可以使用一些预构建步骤/脚本将项目移动到正确的位置。 它不是修改项目构建配置的选项。
使用多个 SCM 插件:
为您需要检出的每个存储库(主项目或依赖项目)创建不同的存储库条目。
对于每个项目,在“高级”菜单(第二个“高级”菜单,每个存储库有两个标记为“高级”的按钮)中,找到“本地子目录 repo(可选)”文本字段。 您可以在“工作区”目录中指定要将项目复制到的子目录。 您可以映射我的开发计算机的文件系统。
“第二个高级菜单”不再存在,需要做的是使用“添加”按钮(在“其他行为”部分),然后选择“签出到子目录”
希望有帮助。
使用 Jenkins + Git 插件不可能在一个工作区中一次检出多个存储库。
作为一种解决方法,您可以有多个上游作业,每个作业检出一个存储库,然后复制到您的最终项目工作区(在多个级别上有问题),或者您可以设置一个 shell 脚本步骤,将每个需要的存储库检出到构建时的作业工作区。
以前 Multiple SCM 插件可以帮助解决此问题,但现在已弃用。 来自 Multiple SCM 插件页面:“用户应该迁移到https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin 。Pipeline 提供了一种更好的检查多个 SCM 的方法,并且得到了 Jenkins 的支持核心开发团队。”
由于多个 SCM 插件已被弃用。
使用Jenkins Pipeline可以检查多个 git repos 并在使用 gradle 构建它之后
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 子模块而不是像这样的自定义管道。
我在 Jenkins 上成功地将Multiple SCM 插件与 Git 插件结合使用。
詹金斯:多个 SCM - 已弃用。 GIT 插件 - 不适用于多个存储库。
脚本/管道即代码 - 是要走的路。
根据存储库的关系,另一种方法是将另一个存储库(存储库)作为git 子模块添加到其中一个存储库中。 一个 git 子模块创建对其他存储库的引用。 除非您在克隆“超级项目” (官方术语)时指定--recursive
标志,否则不会克隆这些子模块存储库。
这是将子模块添加到当前项目的命令:
git submodule add <repository URI path to clone>
我们正在使用 Jenkins v1.645,并且 git SCM 将开箱即用地为超级项目执行递归克隆。 瞧,您将在同一个 Jenkins 作业工作区的各自目录中获得超级项目文件和所有依赖(子模块)repo 文件。
不保证这是正确的方法,而是一种方法。
我也有这个问题。 我在其他项目上使用触发器/调用构建解决了它。 对于每个存储库,我使用参数调用下游项目。
主要项目:
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}
在一个工作区检查了在同一时间超过一个回购协议是可能的詹金斯+ Git的插件(也许只有在最近的版本?)。
在“Source-Code-Management”部分,不要选择“Git”,而是选择“Multiple SCMs”并添加多个git存储库。
确保在除一个之外的所有其他行为中添加“检出到子目录”操作并指定单个子目录作为“附加行为”。
我们正在使用git-repo来管理我们的多个 GIT 存储库。 还有一个Jenkins Repo 插件,它允许将 git-repo 管理的全部或部分存储库签出到同一个 Jenkins 作业工作区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.