签出多个git回到相同的Jenkins工作区
使用Jenkins 1.501和Jenkins Git插件1.1.26
我有3个不同的git回购每个与多个项目。
现在我需要将3个git仓库中的所有项目签出到Jenkins从站的同一工作区中。 我已经定义了每个git仓库: 源代码pipe理:多个SCM 。 但每次检出回购时,以前的回购(及其相关项目)都将被删除。
我读过这个:
http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html
但它并没有真正的帮助。 我已经尝试在本地子目录下为所有回购指定相同的文件夹回购(可选) ,但它给出了相同的结果。
如果使用Jenkins这是不可能的,我想可以使用一些预构build步骤/脚本将项目移动到正确的位置。 它不是修改项目的构buildconfiguration的选项。
Jenkins + Git Plugin不可能在单个工作区中同时检出多个回购。
作为一种解决方法,您可以有多个上游作业,每个上传作业检查单个回购,然后复制到最终的项目工作区(在多个层次上存在问题),或者您可以设置一个shell脚本步骤,检查每个需要的回购构build时的作业工作区。
我肯定会推荐后一种方法,因为如果工作空间位置发生变化,您将不必担心(可以使用$ WORKSPACE环境variables)。
编辑:这个答案是过时的,不再反映最佳做法。 请参阅以下关于Multiple SCM插件的答案。
编辑2:多个SCM插件已被弃用。 从Multiple SCM插件页面:“用户应该迁移到https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin。Pipeline提供了一个更好的检查多个SCM的方法,并且由Jenkins核心开发团队“。;
使用Multiple SCMs插件:
-
为每个需要签出的存储库创build不同的存储库条目(主项目或依赖项目)。
-
对于每个项目,在“高级”菜单(第二个“高级”菜单中,每个存储库有两个标记为“高级”的button),find“本地子目录回购(可选)”文本字段。 您可以在“workspace”目录中指定要复制项目的子目录。 您可以映射我的开发计算机的文件系统。
“第二个高级菜单”不再存在,而是需要使用“Add”button(在“Additional Behaviors”部分),然后select“Check out to a sub-directory”
- 如果你正在使用ant,就像现在build.xml文件的build目标不在工作区的根目录下,而是在一个子目录中,你必须在“Invoke Ant”configuration中反映这一点。 要做到这一点,在“调用ant”中,按“高级”,并填写“生成文件”的input文本,包括build.xml所在的子目录的名称。
希望有所帮助。
我和Jenkins成功地使用了Multiple SCMs Plugin和Git Plugin。
由于Multiple SCMs Plugin已被弃用。
与jenkinspipe道可能签出多个git回购和build设后使用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子模块添加到其中一个存储库。 一个git子模块创build一个对其他回购的引用。 除非您在克隆“超级项目” (官方术语)时指定了--recursive
标志,否则这些子模块回购不会被克隆。
以下是将子模块添加到当前项目的命令:
git submodule add <repository URI path to clone>
我们正在使用Jenkins v1.645,git SCM将会为超级项目做一个recursion克隆。 瞧你得到超级项目文件和所有相关的(子模块)回购文件在他们各自的目录在同一个Jenkins作业工作区。
不保证这是正确的方法,而是一种方法。
我们正在使用git-repo来pipe理我们的多个GIT仓库。 还有一个Jenkins Repo插件 ,可以将所有或部分由git-repopipe理的存储库签出到同一个Jenkins作业工作区。