Есть ли способ поставить блокировку на git-ресурс Concourse? - PullRequest
1 голос
/ 18 мая 2019

У меня есть настроенный конвейер в 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 параллельно, один толкает быстрее, чем второй, второй ломается.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 19 мая 2019

обратите внимание, что ваше описание слишком расплывчато, чтобы дать подробный ответ.

Я ожидаю, что задания будут выполняться одновременно и прекратятся перед нажатием на git, если какая-то другая работа заблокирована на git.

Этого будет недостаточно, если они останавливаются непосредственно перед нажатием, они уже ссылаются на git commit, который станет устаревшим, когда блокировка снята другим заданием: -)

Задания должны быть остановлены в ожидании блокировки перед клонированием git-репо, поэтому в самом начале.

Все это спекуляция с моей стороны, так как опять же неясно, что вы хотите сделать, для такого рода вопросов публикация изображения конвейера с наименьшим возможным размером и кода конфигурации с наименьшим возможным размером полезно.

Вы можете считать https://github.com/concourse/pool-resource механизмом блокировки.

...