在多分支管道中调用作业

时间:2016-06-21 13:16:46

标签: java maven jenkins groovy jenkins-workflow

背景

我想在Jenkins中创建一个非常简单的管道。例如:

  • 第1阶段:使用maven构建
  • 第2阶段:构建泊坞窗图像

在我的项目的根目录中,我有以下Jenkins文件:

stage 'build'
node {
    def branch = env.BRANCH_NAME
    build job: 'Maven job', parameters: [[$class: 'StringParameterValue', name: 'BRANCH_TO_BUILD', value: branch], [$class: 'StringParameterValue', name: 'MAJOR_VERSION_NUMBER', value: '1.0']]
}
stage 'Docker image'
node{
    echo 'TODO://Get jar file from previous job and build Docker image'
}

Maven Job作业将创建一个jar文件,我想在下一阶段使用它来构建我的docker镜像。

我使用外部作业来构建项目的原因是因为我正在使用JFrog Artifactory,并且我希望使用Artfifactory解析所有依赖项。

documentation for the Artifactory Jenkins plugin州:

The current plugin version does not include pipeline DSL for Maven and Gradle builds, but this will become available soon.

如果我使用Maven直接从Groovy脚本构建项目,它将无法解决Artficatory的依赖关系,这不是我想要的。

我安装了Copy Artifact插件,我的Maven Job会在构建结束时归档jar文件。

问题

Jenkinsfile,如何从我刚刚调用的作业中访问已归档的jar文件?

1 个答案:

答案 0 :(得分:1)

您可以使用stash选项:

stash excludes: 'files_i_dont_want', includes: 'files_i_want', name: 'my_custom_name' unstash 'my_custom_name'

实施例: 存储一些文件:https://github.com/jenkins-infra/jenkins.io/blob/master/Jenkinsfile#L62 解冻一些文件:https://github.com/lordofthejars/starwars/blob/master/Jenkinsfile#L44

另一种选择是使用Copy Artifacts Plugin:

step([$class: 'CopyArtifact', excludes: 'do_not_copy.jar', filter: 'copy_this.jar', fingerprintArtifacts: true, projectName: 'Maven Job', target: 'target_dir'])

你有没有试过这个?

希望这有帮助!