【问题标题】:How do i pull in 2 materials into a stage using GoCD?如何使用 GoCD 将 2 种材料拉入舞台?
【发布时间】:2026-01-20 04:55:01
【问题描述】:

我有两种材料:

  • 一个静态 git repo

  • 来自上游管道的工件

下游我有一个 AnalysisBuilders 需要两者都起作用。当任务执行时,我似乎只能访问 git 存储库而不是“网络”工件。

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 repo 的内容。如何让这两种材料都可用?

【问题讨论】:

    标签: go-cd


    【解决方案1】:

    工件不会自动传播到下游管道。您需要添加一个 fetch artifact 任务,如下所示:

    <tasks>
      <fetchartifact pipeline="FishAnalysis" stage="CommitHandler" job="builder" srcdir="web" dest="web">
        <runif status="passed" />
      </fetchartifact>
      <exec command="ls">
      ...
      </exec>
    </tasks>
    

    这是因为工件可以在多个上游作业中发布,并且每个上游作业可以发布不同的工件。请注意,在 AnalysisBuilders 管道中的上游材料定义中,您没有指定作业。

    GoCD 将确保工件的 版本 是正确的。也就是说,它对应于导致该管道运行的上游管道实例。即使您稍后重新运行管道。

    【讨论】: