我如何使用 GoCD 将 2 种材料拉入一个阶段?
How do i pull in 2 materials into a stage using GoCD?
我有两种材料:
静态 git 回购
来自上游管道的工件
下游我有一个 AnalysisBuilders 需要两者都起作用。当任务执行时,我似乎只能访问 git 存储库而不是 'web' 工件。
xml:
<pipeline name="FishAnalysis">
<materials>
<git url="https://fish:XXXXXXX@redacted.com/fish/analysis.git" />
</materials>
<stage name="CommitHandler" cleanWorkingDir="true">
<jobs>
<job name="builder">
<tasks>
<exec command="yarn" workingdir="web">
<arg>install</arg>
<runif status="passed" />
</exec>
<exec command="npm" workingdir="web">
<arg>run</arg>
<arg>build</arg>
</exec>
</tasks>
<artifacts>
<artifact src="web/dist" dest="web" />
<artifact src="web/package.json" dest="web" />
<artifact src="web/node_modules" dest="web" />
<artifact src="web/nginx.conf" dest="web" />
</artifacts>
</job>
</jobs>
</stage>
</pipeline>
.....
<pipeline name="AnalysisBuilders">
<materials>
<pipeline pipelineName="FishAnalysis" stageName="CommitHandler" materialName="FishAnalysis" />
<git url="https://fish:XXXXX@redacted.com/fish/docker.git" dest="docker" materialName="Docker">
</git>
</materials>
<stage name="Builders">
<jobs>
<job name="shellScripts">
<tasks>
<exec command="ls">
<arg>-R</arg>
<arg>.</arg>
<runif status="passed" />
</exec>
</tasks>
</job>
</jobs>
</stage>
</pipeline>
我希望 ls -R 输出有一个 'web' & 'docker' 文件夹。它不是。它只有 docker 仓库的内容。我如何使这两种材料可用?
工件不会自动传播到下游管道。您需要添加一个 fetch artifact 任务,如下所示:
<tasks>
<fetchartifact pipeline="FishAnalysis" stage="CommitHandler" job="builder" srcdir="web" dest="web">
<runif status="passed" />
</fetchartifact>
<exec command="ls">
...
</exec>
</tasks>
这是因为可以在多个上游作业中发布工件,并且每个上游作业可以发布不同的工件。请注意,在 AnalysisBuilders 管道的上游 material 定义中,您没有指定作业。
GoCD 将确保工件的版本 是正确的。也就是说,它对应的是导致这条管道运行的上游管道实例。即使您稍后重新运行管道。
我有两种材料:
静态 git 回购
来自上游管道的工件
下游我有一个 AnalysisBuilders 需要两者都起作用。当任务执行时,我似乎只能访问 git 存储库而不是 'web' 工件。
xml:
<pipeline name="FishAnalysis">
<materials>
<git url="https://fish:XXXXXXX@redacted.com/fish/analysis.git" />
</materials>
<stage name="CommitHandler" cleanWorkingDir="true">
<jobs>
<job name="builder">
<tasks>
<exec command="yarn" workingdir="web">
<arg>install</arg>
<runif status="passed" />
</exec>
<exec command="npm" workingdir="web">
<arg>run</arg>
<arg>build</arg>
</exec>
</tasks>
<artifacts>
<artifact src="web/dist" dest="web" />
<artifact src="web/package.json" dest="web" />
<artifact src="web/node_modules" dest="web" />
<artifact src="web/nginx.conf" dest="web" />
</artifacts>
</job>
</jobs>
</stage>
</pipeline>
.....
<pipeline name="AnalysisBuilders">
<materials>
<pipeline pipelineName="FishAnalysis" stageName="CommitHandler" materialName="FishAnalysis" />
<git url="https://fish:XXXXX@redacted.com/fish/docker.git" dest="docker" materialName="Docker">
</git>
</materials>
<stage name="Builders">
<jobs>
<job name="shellScripts">
<tasks>
<exec command="ls">
<arg>-R</arg>
<arg>.</arg>
<runif status="passed" />
</exec>
</tasks>
</job>
</jobs>
</stage>
</pipeline>
我希望 ls -R 输出有一个 'web' & 'docker' 文件夹。它不是。它只有 docker 仓库的内容。我如何使这两种材料可用?
工件不会自动传播到下游管道。您需要添加一个 fetch artifact 任务,如下所示:
<tasks>
<fetchartifact pipeline="FishAnalysis" stage="CommitHandler" job="builder" srcdir="web" dest="web">
<runif status="passed" />
</fetchartifact>
<exec command="ls">
...
</exec>
</tasks>
这是因为可以在多个上游作业中发布工件,并且每个上游作业可以发布不同的工件。请注意,在 AnalysisBuilders 管道的上游 material 定义中,您没有指定作业。
GoCD 将确保工件的版本 是正确的。也就是说,它对应的是导致这条管道运行的上游管道实例。即使您稍后重新运行管道。