2017-06-19 88 views
0

我正在使用GoCD来构建一个包含大量模块的项目,并将它建模为具有两个阶段的流水线(阶段1是构建代码,阶段2是运行测试)。一个成功的构建阶段之后的目录结构看起来大约是这样的:如何使用GoCD将多个子目录作为一个工件提取?

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 ... 

在第一阶段我已经配置了一个构建神器与源*/build并在第2阶段我试图获取所有构建文件夹再次源* ,意图是它们将在每个项目模块内的src文件夹旁边的正确位置结束。

不幸的是,我发现没有办法做到这一点呢。 GoCD似乎创建了所有*\build文件夹的单独ZIP文件,在取回期间,找不到文件*.zip(我假设它确实在查找具有该确切名称的文件,而不是使用通配符)。当然,我可以对所有模块名称进行硬编码并单独获取myproject-module[1:n],但这正是我想要避免的。

有没有人有关于如何实现这一目标的一些建议?

this discussion从2014年,它被要求通配符不能用来抓取工件。那真的还是这样吗?!

回答

1

我不知道是否有可能使用GoCD的内置功能做的,但应该使用REST API可以肯定是不可能的。

了解当前管道名称,你可以得到它的所有可用的阶段,计算前一个。接下来,使用download作为zip存档的工件目录的可能性,你可以得到你想要的。 因此,您可以将其添加为第二阶段的脚本,该脚本将获得压缩的工件,之后您可以继续进行测试。

要做到这一点,我可以推荐我的执行GoCD API的 - yagocd。这个python库会让你以自然的方式编程前述的逻辑。 一些提示:

  • 你可以从GO_PIPELINE_NAME获得当前管道名(还有为您服务很多environment variables
  • 按名称查找管道可以使用PipelineManagergo.pipelines.get($GO_PIPELINE_NAME, $GO_PIPELINE_COUNTER)
  • 有管道例如,你可以通过pipeline_instance.stages对象
  • 有一个阶段迭代阶段,您可以通过使用go.artifacts.directory_wait米一些路径得到它的工作,下载目录ethod

如果您对实施有任何疑问,我可以帮助您。

0

您可以选择通过通配符的文物,你只需要给神器的目的地(属性dest在XML配置)。你可以这样做多次同样的工作中,只是用不同的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"

相关问题