4

使用 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 上进行压缩和解压缩,我认为必须有一个更简单的解决方案来解决我的问题。

4

1 回答 1

0

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

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

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

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

注意:上述语法仅用于在未选中“获取工件任务”中的源是文件(不是目录)复选框的情况下获取工件目录。

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

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

于 2021-05-08T00:51:51.703 回答