我们决定在我们的多存储库项目上设置一些连续集成过程。我们的想法是为所有目标环境自动构建,并运行回归测试。 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 。
答案 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
的名称,但您当然可以直接在build
和sh
步骤中使用您的工作名称,但我发现重复常数容易出错。
正如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>