首页 > 解决方案 > Jenkins 脚本化管道 - 在阶段之间传递工件的多次执行

问题描述

我正在搜索,但找不到有关如何解决将工件复制到并行执行多次的作业的问题的正确信息。

我已经定义了脚本化的管道,它分阶段执行预定义的作业,其中一些并行运行如下:

我正在使用CopyArtifact 插件来复制创建的工件,但看起来:

  1. 它将文件复制到实例中的主作业文件夹。
  2. 由于不同的工作区/项目位置,我需要定义“目标”位置,以便在作业执行之前将工件正确复制到我在脚本中执行的所需作业。

例如对于 Core 阶段的 coreBuildJob:

`copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' + <job_for_execution>)`

这确实有助于我解决通过这些作业复制所需工件的问题,但在这种情况下我最终遇到了另一个问题:

当我希望使用不同的参数多次执行此脚本化管道作业时。

问题是,当管道第二次执行并且在其中一个阶段运行的作业第二次运行时,它会在本地计算机上创建以下路径:

`/jenkins/workspace/test_jobs/<job_for_execution>@2`

这意味着我的脚本中的内容不正确,因为它将文件复制到:

`/jenkins/workspace/test_jobs/<job_for_execution>`

它不会将工件复制到正确的位置,并且无法从已执行的作业中访问它们。

我想在“构建作业”命令期间执行 copyArtifacts 部分(您可以在 Jenkins UI 中定义,将 BUILD_ID 作为变量传递以复制类似的工件),但我找不到有关此的任何细节以实现相同的行为剧本。

如何解决这个问题?

标签: jenkinsjenkins-pipelinejenkins-pluginsjenkins-groovyjenkins-job-dsl

解决方案


您可以使用存储/取消存储。

运行构建后,您可以存储:

stash name:'data', includes: './*'

其中 data 是名称(标识符),include 可以是目录、子目录或单个文件。

然后,在您希望获得构建输出的阶段,使用 unstash:

unstash 'data'

完成 unstash 后,文件也将位于相应的文件夹中,您可以运行其他步骤。

有关更多信息,请参阅https://www.jenkins.io/doc/pipeline/examples/


推荐阅读