首页 > 解决方案 > 如何从管道中复制其他 Jenkins 作业的工件?

问题描述

我想使用 CopyArtifact 插件从另一个 Jenkins Job 复制构建工件。

使用以下命令创建工件:

archiveArtifacts artifacts: '_Builds/BuildRelease/**', fingerprint: true
build 'Release Installer'

在“发布安装程序”作业中,我尝试使用管道中的以下命令获取存档的工件:

  stages {
    stage('Get Artifacts') {
        steps {
            step([  $class: 'CopyArtifact',
                    projectName: "MyBuildJob",
                    filter: "_Builds/BuildRelease/archive.zip"
            ])
        }
    }

执行“Release Installer”作业时,找不到工件。两个作业都在同一个 Build 节点上执行。

我认为我的过滤规则缺少一些东西。不幸的是,可用的 Jenkins 文档在细节和示例上有点薄。

标签: jenkinsjenkins-pipeline

解决方案


我相信默认是从上次成功的作业中复制。但是,您目前似乎想要上游工作。这是一个片段:

copyArtifacts fingerprintArtifacts: true, projectName: 'MyBuildJob', selector: upstream()

我使用片段生成器生成了这段代码。它应该存在于作业经典视图的左侧面板中。按钮文本为“管道语法”,网址为“my.jenkins.instance.com/pipeline-syntax/”

不需要指定工件过滤器,它将复制所有这些过滤器。但是,如果您想保留过滤器:

copyArtifacts filter: '_Builds/BuildRelease/archive.zip', fingerprintArtifacts: true, projectName: 'MyBuildJob', selector: upstream()

推荐阅读