如何使用GoCD将2种材料拉入舞台?

时间:2017-11-28 19:08:50

标签: go-cd

我有两种材料:

  • 静态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'和&amp; 'docker'文件夹。它不是。它只有docker repo的内容。我如何提供这两种材料?

1 个答案:

答案 0 :(得分:1)

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

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

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

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