在jenkins管道中复制工件

时间:2016-12-02 11:03:48

标签: jenkins groovy jenkins-pipeline

我有一个Jenkins管道作业,它在第一阶段存档Artifact,然后我需要在管道构建的另一个阶段复制该Artifact

node {
  stage 'Stage 1 of build'
  // Run tests, if successful archive the artifact
  archiveArtifacts artifacts: 'build/test.js', excludes: null
 stage 'Stage 2 of build'
 // want to copy artifact from stage 1 of the build
 step([$class: 'CopyArtifact', filter: 'build/test.js', fingerprintArtifacts: true, flatten: true, projectName: 'echo-develop-js-pipeline', selector: [$class: 'WorkspaceSelector'], target: './client/public/vendor/echo/'])
}

有了这个,我得到一个unable to find a build for artifact copy

创建工件后,它将保存在此处:

http://localhost:8181/view/Echo JS Develop/job/echo-develop-js-pipeline/233/artifact/build/test.js

如何从管道作业中访问创建的工件?

3 个答案:

答案 0 :(得分:7)

想出这个,所以使用var $ {BUILD_NUMBER}你可以访问当前管道的工件

step([$class: 'CopyArtifact', filter: 'build/test.js', fingerprintArtifacts: true, flatten: true, projectName: 'echo-develop-js-pipeline', selector: [$class: 'SpecificBuildSelector', buildNumber: '${BUILD_NUMBER}'], target: './client/public/vendor/echo/'])

答案 1 :(得分:6)

我最近需要这个,这里没有其他解决方案完全符合我的要求,因为我需要使用多个参数过滤器来进行选择。这是我使用" 运行选择器插件"所做的事情。除了直接调用" 复制工件插件":

第一步:选择您需要的内部版本号。

prereq_build = selectRun filter: parameters("TARGET_OS=${TARGET_OS},GIT_BRANCH_NAME=${GIT_BRANCH_NAME}"), job: 'prereq_rpms', selector: status('STABLE'), verbose: true

第二步:复制(更新2017-11:现在的本地管道支持!)。

        copyArtifacts(
          projectName: 'prereq_rpms',
          filter: '**/*.rpm',
          fingerprintArtifacts: true,
          target: 'prereq',
          flatten: true,
          selector: specific(prereq_build.getId())
        )

答案 2 :(得分:3)

在管道插件中,有一个名为“stash”的新功能,“unstash”而不是工件。

工件:存档是为长期文件存储而设计的(例如,构建中的中间二进制文件)。工件需要更多的存储空间和资源管理。

Stash:保存一组文件,稍后在同一版本中使用,通常在另一个节点/工作区上使用。 stash和unstash步骤设计用于小文件。 Stash / unstash可以在管道内部使用,只需为存储库分配一个名称即可。仅在本地工作。

这是stash / unstash的一个很好的例子:Tutorial