【问题标题】:GoCD: How to define a pipeline's entire workspace as an artifact for the next stage?GoCD:如何将管道的整个工作区定义为下一阶段的工件?
【发布时间】:2017-11-25 13:08:03
【问题描述】:

使用 GoCD,我如何为下一阶段定义一个阶段的整个工作区(作为单个工件)?这将大大简化我的设置,其中第二阶段需要从前一个阶段获取许多不同的工件。

我尝试了以下工件声明:

  1. 工件来源 = .

这会在第一阶段的上传过程中导致错误:

[go] The rule [.] cannot match any resource under [pipelines/mypipeline]
[go] [go] Uploading finished. Failed to upload [.]
  1. 工件来源 = *

这不会导致错误,但会导致根文件夹中的每个目录单独上传,而不是整个工作区的单个工件。因此,我仍然需要获取多个具体工件,而不是一个大型工作区工件。

[go] Uploading artifacts from /var/lib/go-agent/pipelines/mypipeline/.svn to [defaultRoot]
[go] Uploading artifacts from /var/lib/go-agent/pipelines/mypipeline/cruise-output to [defaultRoot]
[go] Uploading artifacts from /var/lib/go-agent/pipelines/mypipeline/<dir1> to [defaultRoot]
[go] Uploading artifacts from /var/lib/go-agent/pipelines/mypipeline/<...> to [defaultRoot]
[go] Uploading artifacts from /var/lib/go-agent/pipelines/mypipeline/<dirN> to [defaultRoot]

我可能自己用另一个任务压缩所有内容并将其定义为工件,但由于 GoCD 已经在其 onw 上进行压缩和解压缩,我认为必须有一个更简单的解决方案来解决我的问题。

【问题讨论】:

    标签: go-cd


    【解决方案1】:

    我不是专家,只是GoCD 的新手,但经历了同样的反复试验的痛苦,我将分享我从经验中发现的适用语法。对于上游管道中的构建工件:

    • 来源:#{BUILD_DIR}/*.whl - 在定义构建工件时,通配符语法似乎有效;注意:花括号 {XXX_XX} 之间的值是 pipeline parameters
    • 目标:#{ARTIFACT_DIR} - 我更喜欢将所有工件放在单独的文件夹中,因为这样更容易获取。 GoCD 将压缩和传输文件夹并在下游管道中解压缩。

    使用“Fetch Artifact”任务检索工件时,在下游管道或同一管道中的另一个阶段:

    • 来源:#{ARTIFACT_DIR} - 我只使用目录名来获取整个目录
    • 目标./ - 在这种情况下,提取的目录将被提取到当前文件夹中

    注意: 上述语法仅用于在“Fetch Artifact Task”中的Source 是文件(不是目录) 复选框不存在的情况下获取工件目录选择。

    当我尝试使用管道参数或环境变量对文件名进行参数化时(例如,我的文件工件包含动态生成的版本),我无法 fetch artifact files 并且我在 GoCD 文档或示例中没有找到任何建议它的内容是可能的。文档中有下载文件名的示例,该文件名是常量且不会更改。

    如果可能,请分享参数化文件工件的示例或建议的解决方法(如果可能的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2019-03-03
      • 1970-01-01
      • 2018-04-01
      相关资源
      最近更新 更多