5
从the documentation我不清楚如果甚至有可能将一个作业的输出传递给另一个作业(不是从任务到任务,而是从作业到作业)。Concourse:如何将作业的输出传递给另一个作业
我不知道在概念上我做的是正确的事情,也许它应该在Concourse中以不同的方式建模,但是我试图实现的是将Java项目的管道拆分成几个粒度化作业,并行执行,并在需要重新运行某项工作时独立触发。
我怎么看管道:
- 第一份工作:
- 拉从GitHub回购
- 代码编译的Maven项目
- 部署文物的Maven仓库(
mvn deploy
) - 更新
SNAPSHOT
版本的Maven项目子模块 个
- 副本工件(JAR文件)到输出目录
- 二作业(
task
的output
):- 拾起
jar
的从output
- 建立搬运工容器所有的人(并行)
- 拾起
- 流水线继续
我无法将output
从作业1传递给作业2. 此外,我很好奇,如果我介绍的原始git repo资源的任何更改将出现在下一个作业(从作业1到作业2)中。
所以问题是:
- 什么是通过从转换工作状态建立一个适当的方式(我知道,乔布斯可能会安排不同的节点上,肯定在不同的容器)?
- 是否需要将状态存储在资源中(比如S3/git)?
- 设计中的Concourse stateless(在这种情况下)?
- 哪里是获取更多信息的最佳地点?我已经尝试过这本手册,但没有详细说明。
我到目前为止已经发现:
output
s的不是从作业传递到工作- 到资源(
put
到GitHub库)的任何变化都在接下来的工作中取出,但在工作副本的变化并不
小例子,(它失败,如果注释行是注释掉错误:missing inputs: gist-upd, gist-out
):
---
resources:
- name: gist
type: git
source:
uri: "[email protected]:snippets/foo/bar.git"
branch: master
private_key: {{private_git_key}}
jobs:
- name: update
plan:
- get: gist
trigger: true
- task: update-gist
config:
platform: linux
image_resource:
type: docker-image
source: {repository: concourse/bosh-cli}
inputs:
- name: gist
outputs:
- name: gist-upd
- name: gist-out
run:
path: sh
args:
- -exc
- |
git config --global user.email "[email protected]"
git config --global user.name "Concourse"
git clone gist gist-upd
cd gist-upd
echo `date` > test
git commit -am "upd"
cd ../gist
echo "foo" > test
cd ../gist-out
echo "out" > test
- put: gist
params: {repository: gist-upd}
- name: fetch-updated
plan:
- get: gist
passed: [update]
trigger: true
- task: check-gist
config:
platform: linux
image_resource:
type: docker-image
source: {repository: alpine}
inputs:
- name: gist
#- name: gist-upd
#- name: gist-out
run:
path: sh
args:
- -exc
- |
ls -l gist
cat gist/test
#ls -l gist-upd
#cat gist-upd/test
#ls -l gist-out
#cat gist-out/test
太棒了,谢谢! –
没问题,我只是编辑了答案,添加了一些更多信息。 –
我会注意到,虽然工作对工作状态需要声明的资源,但它并未明确要求使用外部资源在同一工作的各个步骤之间传递数据。任务或资源的获取/放入会自动复制为目录。一个任务可以声明一个新的put:资源,这个资源对于作业来说是本地的,并且不会在流水线中声明为资源,同一个作业中的另一个任务可以有get:来匹配它。 –