我在Concourse中设置了管道,其中一些工作正在构建Docker映像。 构建之后,我将图像标签推送到git repo。 问题是,当构建同时结束时,一个作业推送到git,而另一个作业刚刚撤消,而第二个作业尝试推送到git时出错。
error: failed to push some refs to 'git@github.com:*****/*****'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
那么有什么方法可以防止并发推送?
到目前为止,我已经尝试将serial
和serial_groups
应用于作业。
它有帮助,但是所有工作都排在了队列中,因为我们有很多版本。
如果其他一些作业有锁,我希望作业可以同时运行并暂停,然后再执行git操作。
resources:
- name: backend-helm-repo
type: git
source:
branch: master
paths:
- helm
uri: git@github.com:******/******
-...
jobs:
-...
- name: some-hidden-api-build
serial: true
serial_groups:
- build-alone
plan:
- get: some-hidden-api-repo
trigger: true
- get: golang
- task: build-image
file: somefile.yaml
- put: some-hidden-api-image
- get: backend-helm-repo
- task: update-helm-tag
config:
platform: linux
image_resource:
type: registry-image
source:
repository: mikefarah/yq
tag: latest
run:
path: /bin/sh
args:
- -xce
- "file manipulations && git commit"
inputs:
- name: some-hidden-api-repo
- name: backend-helm-repo
outputs:
- name: backend-helm-tag-bump
- put: backend-helm-repo
params:
repository: backend-helm-tag-bump
- put: some-hidden-api-status
params:
commit: some-hidden-api-repo
state: success
- name: some-other-build
serial: true
serial_groups:
- build-alone
plan:
- get: some-other-repo
trigger: true
- get: golang
- task: build-image
file: somefile.yaml
- put: some-other-image
- get: backend-helm-repo
- task: update-helm-tag
config:
platform: linux
image_resource:
type: registry-image
source:
repository: mikefarah/yq
tag: latest
run:
path: /bin/sh
args:
- -xce
- "file manipulations && git commit"
inputs:
- name: some-other-repo
- name: backend-helm-repo
outputs:
- name: backend-helm-tag-bump
- put: backend-helm-repo
params:
repository: backend-helm-tag-bump
- put: some-other-status
params:
commit: some-other-repo
state: success
-...
因此,如果作业同时完成映像构建并并行提交git,则一次推送的速度要比第二次快,第二次中断。
有人可以帮忙吗?
答案 0 :(得分:0)
请注意,您的描述太含糊,无法给出详细答案。
如果其他作业对git有锁定,我希望作业可以并发并在推送到git之前停止。
这还不够,如果它们在推送之前就停止了,它们已经引用了git commit,当其他作业释放锁时,它将变为陈旧:-)
在克隆git repo之前,作业必须停止,等待锁,因此从一开始就是如此。
所有这些都是我的推测,因为再次不清楚您要做什么,对于此类问题,发布尽可能小的管道映像和尽可能小的配置代码是有帮助。
您可以将https://github.com/concourse/pool-resource视为锁定机制。