GoCD:如何将管道的整个工作空间定义为下一阶段的工件?

时间:2017-06-22 10:04:57

标签: go-cd

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

我尝试过以下工件声明:

  1. 神器来源= .
  2. 这会在第一阶段上传期间导致错误:

    [go] The rule [.] cannot match any resource under [pipelines/mypipeline]
    [go] [go] Uploading finished. Failed to upload [.]
    
    1. 神器来源= *
    2. 这不会导致错误,但会导致根文件夹中的每个目录单独上载,而不是整个工作区的单个工件。因此,我仍然需要获取多个具体工件,而不是一个大工作空间工件。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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