Jenkins Pipeline:如何使用前几个阶段构建的库?

时间:2016-08-22 09:11:13

标签: jenkins jenkins-pipeline

我们决定在我们的多存储库项目上设置一些连续集成过程。我们的想法是为所有目标环境自动构建,并运行回归测试。 Jenkins看起来像是一个全面的FOSS解决方案,它促进了其Pipeline插件的使用。

对于考试,我们假设我们有库 A ,这是库 B 的必需依赖项。我们创建了一个自由式项目 build A ,它成功克隆并编译 A 。 从the documentation和代码段生成器,我们启动了一个管道,其第一步是运行 build A

node {
   stage 'Build dependencies'
   build 'build A'
   //
   stage 'Build executable'
   git url: 'git@gitrepo:projectB', credentialsId: 'jenkins'
   sh 'cmake -DPATH_TO_A=XXX ./'
   // We do not know what to do then to use the built dependencies ?
   // In particular, XXX should be replaced by a path to the header and binaries 
   // provided by A's build step.
}

我们无法在项目构建 B 中找到如何使用此构建的依赖 A

2 个答案:

答案 0 :(得分:0)

您可以尝试将libA复制到libB中,以便可以访问它。

详情请参阅

https://www.cloudbees.com/blog/copying-artifacts-between-builds-jenkins-workflow

答案 1 :(得分:0)

使用文件夹符号

使用简单的文件夹符号来完成其他工作应该非常简单:../project-A-name来自当前管道工作区。

您的脚本如下所示:

node {
   stage 'Build dependencies'
   def jobAName = "A"
   build "build ${jobAName}"

   stage 'Build executable'
   git url: 'git@gitrepo:projectB', credentialsId: 'jenkins'
   sh "cmake -DPATH_TO_A=../${jobAName}/yourartifact"
}

请注意,我使用双引号替换了cmake步骤的简单引号,以启用变量替换。

另外,您会注意到我定义了一个变量来记录job A的名称,但您当然可以直接在buildsh步骤中使用您的工作名称,但我发现重复常数容易出错。

使用复制工件插件

正如Tim在他的回答中提到的,你也可以使用Copy Artifact Plugin将作业A工件复制到当前的project B管道。你的管道看起来像这样:

node {
   stage 'Build dependencies'
   def jobAName = "A"
   build "build ${jobAName}"

   stage 'Build executable'
   step ([$class: 'CopyArtifact', projectName: "${jobAName}", filter: 'target/yourartifact', target: '.']); 
   sh 'cmake -DPATH_TO_A=yourartifact'
}

同样,我使用变量和双引号进行变量替换。

在此步骤中,filter param将允许您在项目A工作空间中选择工件的相对路径,而target参数将指定您要在项目B工作空间中复制工件的位置。< / p>