有没有办法锁定Concourse git-resource?

时间:2019-05-18 08:38:15

标签: concourse concourse-git-resource

我在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.

那么有什么方法可以防止并发推送?

到目前为止,我已经尝试将serialserial_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,则一次推送的速度要比第二次快,第二次中断。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

请注意,您的描述太含糊,无法给出详细答案。

  

如果其他作业对git有锁定,我希望作业可以并发并在推送到git之前停止。

这还不够,如果它们在推送之前就停止了,它们已经引用了git commit,当其他作业释放锁时,它将变为陈旧:-)

在克隆git repo之前,作业必须停止,等待锁,因此从一开始就是如此。

所有这些都是我的推测,因为再次不清楚您要做什么,对于此类问题,发布尽可能小的管道映像和尽可能小的配置代码是有帮助。

您可以将https://github.com/concourse/pool-resource视为锁定机制。