我正在使用GoCD构建一个包含大量模块的项目,我将其建模为具有两个阶段的管道(阶段1是构建代码,阶段2是运行测试)。成功构建阶段后的目录结构如下所示:
myproject/
|-- myproject-module1
| |-- build <-- created by stage 1, required by stage 2
| `-- src
|-- myproject-module2
| |-- build <-- created by stage 1, required by stage 2
| `-- src
|-- myproject-module3
| |-- build <-- created by stage 1, required by stage 2
| `-- src
`-- ... many more modules ...
在第1阶段,我已经使用源*/build
配置了构建工件,并且在第2阶段我尝试使用源*
再次获取所有构建文件夹,意图是最终到达每个项目模块中src
文件夹旁边的正确位置。
不幸的是,我发现还没有办法实现这一目标。 GoCD似乎创建了一个包含所有*\build
个文件夹的单独ZIP文件,在获取期间,找不到文件*.zip
(我认为它确实在寻找具有该确切名称的文件,而不是使用通配符)。当然,我可以硬编码所有模块名称并单独获取myproject-module[1:n]
,但这正是我想要避免的。
有没有人就如何实现这一目标提出一些建议?
自2014年this discussion起,声称通配符不能用于获取工件。那真的是这样吗?!
答案 0 :(得分:1)
我不知道是否可以使用GoCD的内置功能,但绝对可以使用REST API。
了解当前的管道名称,您可以获得它的所有可用阶段并计算之前的管道名称。接下来,使用download工件目录作为zip存档的可能性,您可以得到您想要的。 因此,您可以将其添加为第二阶段的脚本,这将获得压缩工件,之后您可以继续测试。
为此,我建议实施GoCD API - yagocd。这个python库可以让你以自然的方式编写上述逻辑。 一些提示:
go.pipelines.get($GO_PIPELINE_NAME, $GO_PIPELINE_COUNTER)
pipeline_instance.stages
object go.artifacts.directory_wait
方法如果您对实施有疑问,我可以尝试帮助您。
答案 1 :(得分:0)
您可以通过通配符选择工件,您只需要为工件提供目标(XML配置中的属性dest
)。您可以在同一作业中多次执行此操作,每次只使用不同的dest
:
<artifact src="myproject/myproject-module1/build/*" dest="module1/" />
<artifact src="myproject/myproject-module2/build/*" dest="module2/" />
<artifact src="myproject/myproject-module3/build/*" dest="module3/" />
然后,相应的<fetchartifact ...>
代码需要使用srcdir="module1"
等。