我想在我的Jenkins multibranch管道中结清第二笔回购

我想在我的Jenkins multibranch管道中结清第二笔回购,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,在我的jenkins文件中,“checkout scm”命令将签出我在配置面板中配置的任何repo 但是,如果我在Jenkins文件中添加第二个repo,有没有办法将其签出到工作区内的sepcific目录?问题是我不想将任何URL硬编码到我的Jenkins文件中。下面是我试图实现的一个例子: stage("Checkout") { checkout scm // Works fine, checks out the 1st consifured repo to workspace. d

在我的jenkins文件中,“checkout scm”命令将签出我在配置面板中配置的任何repo

但是,如果我在Jenkins文件中添加第二个repo,有没有办法将其签出到工作区内的sepcific目录?问题是我不想将任何URL硬编码到我的Jenkins文件中。下面是我试图实现的一个例子:

stage("Checkout") {
  checkout scm // Works fine, checks out the 1st consifured repo to workspace.

  dir("src") {
  checkout scm // Checks out the exact same repo again, but how can I change this to colone the 2nd repo instead?
  }
}
基本上-我可以用什么来代替第二个“checkout scm”,让它拉取多分支管道web配置中配置的第二个repo


假设这实际上是不可能的——如果无法在脚本中签出多个repo,那么允许用户在配置表单中提供多个repo还有什么意义呢?

使用yourjenkinshostname.com/pipeline-syntax/上的url生成“签出:常规SCM”的步骤。之后,填写您想要的回购信息,然后单击“其他行为”,并为“签出到子目录”添加一个

最后单击“生成管道脚本”。该文件的输出应该可以在Jenkins文件中使用。完成后,流程如下所示:

checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-dir']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/jenkinsci/puppet-jenkins.git']]])

或者,如果您习惯于签出步骤,则可以使用“RelativeTargetDirectory”扩展类来执行此操作。包含的签出步骤如下所示:

checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-dir']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/jenkinsci/puppet-jenkins.git']]])
关键部分是

extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test-dir']]
编辑:根据issues.jenkins-ci.org/browse/jenkins-32018,多分支作业的多个源不是针对两个不同的存储库,而是针对单个存储库的多个源


恐怕您需要硬编码URL。一种方法是有两个多分支作业。一个将SCM作为repo A,硬编码为repo B的签出,另一个将repo B作为SCM,硬编码为repo A的签出。

第一个示例将URL硬编码为语法,因此这是不可接受的。但是第二个示例-这如何确定哪个repo被签出?哦,抱歉,我以为你在用组织工作。在那里读错了。第二个是您只需添加到现有签出中的内容。根据,多分支作业的多个源不是针对两个不同的存储库,而是针对单个存储库的多个源。恐怕您需要硬编码URL。一种方法是有两个多分支作业。一个将SCM作为回购A,硬编码为回购B的签出,另一个将回购B作为SCM,硬编码为回购A的签出。这样行吗?哦,谢谢你发现了这一点。这是一个多么无用和误导的功能!!赞成。他们提供了一个非常好的用例(如果你有一个私有的回购协议,和许多大型开源项目一样,有一个公共的回购镜像),但是应该在UI中更好地解释它。