Có thể khóa các nhóm công việc trên các nhóm trên các đường ống gitlab không?


11

Tôi có nhiều công việc làm việc với một tài nguyên bên ngoài (máy chủ). Công việc đầu tiên triển khai ứng dụng vào môi trường, thứ hai thực hiện các thử nghiệm tại môi trường này, thứ ba thực hiện các thử nghiệm tích hợp tại môi trường này.

Tôi biết có tùy chọn nhóm tài nguyên . Nhưng nó chỉ khóa công việc. Nếu hai đường ống chạy đồng thời tôi cần phải thực hiện job1, job2, job3từ các đường ống dẫn đầu và chỉ khi tài nguyên đường ống phát hành đầu tiên - các đường ống thứ hai có thể khởi động jobs1-3. Có cách nào để đạt được điều này? Có những công việc khác trong đường ống - họ nên làm việc đồng thời.

Câu trả lời:


1

Thiết lập một trình chạy chuyên dụng cho các công việc1-3.

  1. Thiết lập một người chạy mới với một thẻ duy nhất, ví dụ: 'jobs-1-2-3' và đặt tùy chọn concurrentthành1 .

  2. Thêm thẻ duy nhất, ví dụ: 'jobs-1-2-3' vào các công việc đang được đề cập.

    job1:
      tags:
        - jobs-1-2-3
    job2:
      tags:
        - jobs-1-2-3
    job3:
      tags:
        - jobs-1-2-3
    

IMHO này là ít nỗ lực và đáng tin cậy hơn.


Không chắc chắn nó sẽ hoạt động. Kịch bản có thể xảy ra: pipe1 (p1) chạy job1 (j1), sau đó pipe2 (p2) chạy job1 (j1), sau đó đường ống 1 bắt đầu job2. Tôi cần p1 chạy j1, j2, j3 rồi p2 chạy j1, j2, j3. Có vẻ như nhóm tài nguyên sẽ làm như vậy
Zufar Muhamadeev

Vì người chạy mới sẽ chỉ xử lý một công việc tại một thời điểm và do thẻ duy nhất mà người chạy khác sẽ không chọn công việc, nên p2 được đảm bảo chờ p1 kết thúc. Đồng thời xem docs.gitlab.com/ee/user/project/pipelines/ triệt
Riwe

Tôi không muốn hủy các đường ống đang chờ xử lý. Như tôi đã nói có những công việc khác - họ nên làm việc đồng thời. Vì vậy, bạn có đang tiết kiệm nếu hai đường ống đang chạy và tùy chọn đồng thời được đặt - người chạy sẽ luôn chọn công việc từ đường ống đầu tiên?
Zufar Muhamadeev

Có, người chạy sẽ hoàn thành các công việc trong p1 trước khi xử lý các công việc từ p2.
Riwe

Cách tiếp cận này hoạt động cho đến nay
Zufar Muhamadeev

0

Tôi nghĩ rằng nó có thể được thực hiện thông qua needsresource_groupcác từ khóa và API gitlab.

Mỗi công việc nhận id đường ống mà nó thuộc về a predefined-variable. Nếu bạn sử dụng gitlab api, bạn có thể thấy trạng thái của các công việc khác trong đường ống. Nếu bạn có thể sử dụng trạng thái này needsresource_groupcác từ khóa tôi nghĩ bạn có thể đạt được những gì bạn dự định. Xem mô tả của mã dưới đây và ý kiến ​​của nó để biết thêm chi tiết.

stages:
  - ready
  - build

job1:
  stage: build
  needs: [starting_signal]
  script: 
    - sleep 10 && echo "job1"
job2:
  stage: build
  needs: [starting_signal]
  script:
    - sleep 20 && echo "job2"
job3:
  stage: build
  needs: [starting_signal]
  script:
    - sleep 30 && echo "job3"

starting_signal:
  stage: ready
  script:
    - # TODO: You need to implement it using the GitLab API.
    - # The starting condition for "job1-3" is
    - # that this `starting_signal` job finished successfully.
    - # And the condition that ends with the success of this job
    - # is that `traffic_light` becomes running.

traffic_light: 
  stage: ready
  resource_group: traffic_light
  script:
    - # TODO: You need to implement it using the GitLab API.
    - # The end condition for `traffic_light` is
    - # the end of job1-3 execution.
    - # In other words, this job must be checked and waited
    - # through gitlab api until job 1,2,3 is finished.
    - # Since this job locks the execution of a `traffic_light` job
    - # in another pipeline, the `starting_signal` job in another 
    - # pipeline does not succeed.

(Tôi đã không tự kiểm tra, vì vậy phương pháp này cần được xem xét.)

Tài liệu tham khảo:


Cảm ơn câu trả lời của bạn. Nếu tôi hiểu đúng trong traffic_lightcông việc, tôi nên đợi kết thúc thực hiện công việc1-3 trong đường ống đồng thời. Những gì tôi không thích trong phương pháp này - phút ci của bạn sẽ bị lãng phí khi kiểm tra trạng thái của đường ống đồng thời.
Zufar Muhamadeev

Nếu bạn lo lắng về ci phút, bạn có thể sử dụng gitlab-runner tự lưu trữ để traffic_lightsử dụng tagstừ khóa. Nhiều nhà cung cấp đám mây ngày nay cung cấp các phiên bản cấp miễn phí, đủ để chạy các công việc chờ đơn giản như thế nào traffic_light.
aluc

Có vẻ như gitlab đếm số phút ngay cả khi người chạy tự lưu trữ. Tôi đang cố gắng thử lại công việc có thẻ cho người chạy tự lưu trữ - nhưng nó không khởi chạy và hiển thị thông báo về giới hạn số phút vượt quá giới hạn: i.imgur.com/vBftxmk.png
Zufar Muhamadeev

1
Nếu nó có liên quan đến vấn đề này ( gitlab.com/gitlab-org/gitlab-foss/issues/58942 ), có vẻ như người chạy cụ thể không hoạt động khi vượt quá hạn ngạch. Tôi không chắc điều này có rõ ràng không, nhưng điều này không liên quan trực tiếp đến câu hỏi ban đầu của bạn, vì vậy tôi sẽ đề nghị đăng một câu hỏi riêng ở đây hoặc trên gitlab.
aluc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.