大厅:如何将作业的输出传递给不同的作业

时间:2017-03-06 20:27:52

标签: concourse

我不清楚the documentation是否有可能将一个作业的输出传递给另一个作业(不是从任务到任务,而是从一个工作到另一个工作)。

我不知道从概念上讲我是做正确的事情,也许它应该在Concourse中以不同方式建模,但我想要实现的是将Java项目的管道分成几个细粒度的工作,这可以是并行执行,如果我需要重新运行一些工作,则独立触发。

我如何看待管道:

  1. 第一份工作:
    • 从github repo中提取代码
    • 使用maven构建项目
    • 将工件部署到maven存储库(mvn deploy
    • 更新Maven项目子模块的SNAPSHOT版本
    • 将工件(jar文件)复制到输出目录(output的{​​{1}})
  2. 第二份工作:
    • task
    • 中选择jar
    • 为所有这些(并行)构建docker容器
  3. 管道继续
  4. 我无法将output从作业1传递到作业2。 此外,我很好奇,如果我在原来的git repo资源中引入的任何更改将出现在下一个作业中(从作业1到作业2)。

    所以问题是:

    1. 将构建状态从作业传递给作业的正确方法是什么(我知道,作业可能会安排在不同的节点上,并且肯定在不同的容器中)?
    2. 是否有必要将状态存储在资源中(例如,S3 / git)?
    3. Concourse是否设计无国界(在此背景下)?
    4. 哪里是获取更多信息的最佳地点?我已经尝试过这本手册,但这并不是那么详细。
    5. 到目前为止我发现了什么:

      1. output未从作业传递给作业
      2. 在下一个作业中获取资源(output到github repo)的任何更改,但工作副本中的更改不是
      3. 最小示例(如果注释行未注释错误,则会失败:put):

        missing inputs: gist-upd, gist-out

1 个答案:

答案 0 :(得分:11)

逐一回答您的问题。

  1. 所有构建状态需要以resource的形式从一个作业传递到另一个作业,这个状态必须存储在某种外部存储中。
  2. 有必要存放在某种外部商店。每种资源类型都会处理此上传和下载本身,因此对于您的具体情况,我会查看此maven custom resource type,这似乎可以满足您的需求。
  3. 是的,这种无国籍状态是广场背后的决定性特征。汇编中唯一的有状态元素是资源,必须严格版本化并存储在外部数据存储中。当您将任务的容器化与外部资源存储相结合时,您将获得大厅提供的有保证的可重复性。每个版本的资源都将在某种数据存储上备份,因此,即使ci运行的数据中心完全崩溃,您仍然可以严格重现每个ci版本。
  4. 为了获得更多信息,我建议您做一些类型的教程,让自己弄脏并自己构建管道。 Stark和Wayne有tutorial可能有用。为了帮助理解资源,还有resources tutorial,这可能对您有所帮助。
  5. 此外,为了得到您的具体错误,您看到missing inputs的原因是因为大厅将查找名为每个输入的目录(由资源gets制作)。因此,在开始任务之前,您需要get名为gist-updgist-out的资源实例。