У меня есть настроенный конвейер в Concourse с некоторыми заданиями, которые создают образы Docker.
После сборки я помещаю тег изображения в репозиторий git.
Проблема в том, что когда сборки заканчиваются в одно и то же время, одно задание подталкивает к 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 commit параллельно, один толкает быстрее, чем второй, второй ломается.
Может кто-нибудь помочь?