Tôi nghĩ rằng nó có thể được thực hiện thông qua needs
và resource_group
cá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 needs
và resource_group
cá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: