Birden fazla gitlab boru hattında iş grubunu “kilitlemek” mümkün mü


11

Tek bir dış kaynakla (sunucu) çalışan birden fazla işim var. İlk iş, uygulamayı çevreye dağıtır, ikincisi bu ortamda testleri yürütür, üçüncüsü de bu ortamda entegrasyon testlerini yürütür.

Kaynak grubu seçeneği olduğunu biliyorum . Ancak sadece işleri kilitler. İki boru hatları eş zamanlı çalıştırırsanız ben yürütmek gerekiyor job1, job2, job3ikinci boru hattı başlatabilir - ilk boru hattı ve sadece ilk boru hattı açma kaynaktan jobs1-3. bunu arşivlemenin bir yolu var mı? Boru hattında başka işler var - aynı anda çalışmalılar.

Yanıtlar:


1

İşler için özel bir koşucu kurun1-3.

  1. 'Jobs-1-2-3' gibi benzersiz bir etiketle yeni bir koşucu ayarlayın ve seçeneği concurrentolarak ayarlayın1 .

  2. Söz konusu işlere benzersiz etiketi, örneğin 'jobs-1-2-3' ekleyin.

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

IMHO bu daha az çaba ve daha güvenilir.


Çalışacağından emin değilim. Olası senaryo: boru hattı1 ​​(p1) iş1'i (j1) çalıştırın, sonra boru hattı2 (p2) iş1'i (j1) çalıştırın, ardından boru hattı 1 işi başlatır2. P1 run j1, j2, j3 sonra p2 run j1, j2, j3 gerekir. Kaynak grup aynı şeyi yapacak gibi görünüyor
Zufar Muhamadeev

Yeni koşucu bir seferde yalnızca bir işi işleyeceğinden ve benzersiz etiket nedeniyle başka hiçbir koşucunun işleri seçmeyeceğinden, p2'nin p1'in bitmesini beklemesi sağlanır. Ayrıca bkz. Docs.gitlab.com/ee/user/project/pipelines/…
RiWe

Bekleyen boru hatlarını iptal etmek istemiyorum. Dediğim gibi başka işler var - aynı anda çalışmalılar. Peki iki boru hattı çalışıyorsa ve eşzamanlı seçenek ayarlanmışsa, koşucu her zaman ilk boru hattından iş seçecek mi?
Zufar Muhamadeev

Evet, koşucu p2'deki işleri işlemeden önce p1'deki işleri bitirecektir.
RiWe

Bu yaklaşım şu ana kadar çalışıyor
Zufar Muhamadeev

0

Ben needsve resource_groupanahtar kelimeler ve gitlab API yoluyla uygulanabilir düşünüyorum .

Her iş, ait olduğu boru hattı kimliğini alır predefined-variable. Gitlab api kullanırsanız, boru hattındaki diğer işlerin durumunu görebilirsiniz. Bu durumu needsve resource_groupanahtar kelimeleri kullanabileceğinizi düşünüyorsanız, istediğinizi elde edebilirsiniz. Daha fazla ayrıntı için aşağıdaki kodun açıklamasına ve yorumlarına bakın.

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.

(Kendim test etmedim, bu yüzden bu yöntemin gözden geçirilmesi gerekiyor.)

Referenecs:


Cevabınız için teşekkürler. Eğer işte doğru traffic_lightanladıysam, eşzamanlı boru hattında job1-3'ün tamamlanmasını beklemeliyim. Bu yaklaşımda sevmediğim şey - ci dakikalarınız eşzamanlı boru hattının durumunu kontrol etmek için harcanacak.
Zufar Muhamadeev

Eğer ci dakikada endişe iseniz, için kendi kendine barındırılan gitlab rekortmen kullanabilirsiniz traffic_lightkullanarak tagsanahtar kelimeyi. Bugün birçok bulut satıcısı, basit bekleme işlerini yürütmek için yeterli olan ücretsiz katman örnekleri sağlar traffic_light.
aluc

Gitlab kendi kendine barındırılan koşucularda bile dakika sayıyor gibi görünüyor. Kendinden barındırılan koşucu için etiketi olan işi yeniden denemeye çalışıyorum - ancak lansman yapmıyor ve boru hattı dakika sınırı aşımı hakkında mesaj gösteriyor: i.imgur.com/vBftxmk.png
Zufar Muhamadeev

1
Bu ( gitlab.com/gitlab-org/gitlab-foss/issues/58942 ) sorunu ile ilgiliyse , kota aşıldıktan sonra belirli koşucunun çalışmadığı görülmektedir. Bunun açık olup olmadığından emin değilim, ancak bu doğrudan orijinal sorunuzla ilgili değil, bu yüzden burada veya gitlab'da ayrı bir soru göndermenizi öneririm.
aluc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.