jenkins - Jenkins 脚本化管道 - 在阶段之间传递工件的多次执行
问题描述
我正在搜索,但找不到有关如何解决将工件复制到并行执行多次的作业的问题的正确信息。
我已经定义了脚本化的管道,它分阶段执行预定义的作业,其中一些并行运行如下:
主管道作业位于以下结构中:/jenkins/workspace/<main_job> 这些作业也在准备工件,我稍后将它们复制到同一管道中的不同阶段/作业,并使用已执行作业的构建 ID。
node() { stage("Creating Build") { def stages = [:] failFast: true stages["Core"] = { copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' + coreBuildJob) buildCore = build job: coreBuildJob } } stages["Content"] = { copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' + contentBuildJob) buildContent = build job: contentBuildJob } parallel(stages) }
我正在使用CopyArtifact 插件来复制创建的工件,但看起来:
- 它将文件复制到实例中的主作业文件夹。
- 由于不同的工作区/项目位置,我需要定义“目标”位置,以便在作业执行之前将工件正确复制到我在脚本中执行的所需作业。
例如对于 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 作为变量传递以复制类似的工件),但我找不到有关此的任何细节以实现相同的行为剧本。
如何解决这个问题?
解决方案
您可以使用存储/取消存储。
运行构建后,您可以存储:
stash name:'data', includes: './*'
其中 data 是名称(标识符),include 可以是目录、子目录或单个文件。
然后,在您希望获得构建输出的阶段,使用 unstash:
unstash 'data'
完成 unstash 后,文件也将位于相应的文件夹中,您可以运行其他步骤。
推荐阅读
- php - 如何使用 AJAX 在 Laravel 中运行路由?
- r - 根据所选输入显示图形
- kotlin - Kotlin smart-cast 假设太多?
- excel - Excel VBA:当我将日期带入列表框并移出另一个工作表时的日期格式
- javascript - 如何使用 Tone.js 的 Tone.player 暂停音乐(mp3)?
- android - 从 Kotlin 对象列表中获取单个对象
- python - discord.py bot 在本地工作,但在 heroku 上托管时不能
- c# - 无法访问 Dialogflow V2 检测 Intent C# Webhook
- javascript - SPF 不适用于 django,后退箭头未更改页面
- wpf - 如何使用 FilterEventArgs MVVM 从 ICollectionView 中删除重复项