เป็นไปได้ไหมที่จะ“ ล็อก” กลุ่มงานที่มีหลาย gitlab pipelines


11

ฉันมีหลายงานที่ทำงานกับทรัพยากรภายนอก (เซิร์ฟเวอร์) เดียว งานแรกนำแอพไปใช้กับสภาพแวดล้อม, ดำเนินการทดสอบที่สองที่สภาพแวดล้อมนี้, ดำเนินการทดสอบรวมที่สามที่สภาพแวดล้อมนี้

ฉันรู้ว่ามีตัวเลือกกลุ่มทรัพยากร แต่มันล็อคงานเท่านั้น หากทั้งสองท่อทำงานควบคู่กันไปฉันต้องการที่จะดำเนินการjob1, job2, job3จากท่อแรกและครั้งเดียวเมื่อทรัพยากรปล่อยท่อแรก - jobs1-3ท่อที่สองสามารถเปิด มีวิธีที่จะบรรลุเป้าหมายนี้หรือไม่? มีงานอื่น ๆ ในท่อ - พวกเขาควรทำงานพร้อมกัน

คำตอบ:


1

ติดตั้งนักวิ่งโดยเฉพาะสำหรับงาน 1-3

  1. การติดตั้งวิ่งใหม่ที่มีแท็กที่ไม่ซ้ำกันเช่น 'งาน-1-2-3 และตั้งค่าตัวเลือกconcurrent1ที่จะ

  2. เพิ่มแท็กที่ไม่ซ้ำกันเช่น 'jobs-1-2-3' ให้กับงานที่เป็นปัญหา

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

IMHO นี่คือความพยายามน้อยลงและเชื่อถือได้มากขึ้น


ไม่แน่ใจว่ามันจะทำงาน สถานการณ์ที่เป็นไปได้: ไปป์ไลน์ 1 (p1) รัน job1 (j1) จากนั้นไปป์ไลน์ 2 (p2) เรียกใช้งาน 1 (j1) จากนั้นไปป์ไลน์ 1 เริ่ม job2 ฉันต้องการ p1 run j1, j2, j3 และ p2 run j1, j2, j3 ดูเหมือนว่ากลุ่มทรัพยากรจะทำแบบเดียวกัน
Zufar Muhamadeev

เนื่องจากนักวิ่งใหม่จะประมวลผลงานครั้งละหนึ่งงานเท่านั้นและเนื่องจากแท็กที่ไม่ซ้ำใครไม่มีนักวิ่งคนอื่นจะเลือกงานจึงมั่นใจได้ว่า p2 รอให้ p1 เสร็จสิ้น ดูdocs.gitlab.com/ee/user/project/pipelines/?hl=th
RiWe

ฉันไม่ต้องการยกเลิกท่อส่งที่รอดำเนินการ อย่างที่ฉันบอกว่ามีงานอื่น - พวกเขาควรทำงานพร้อมกัน คุณกำลังทำเช่นนั้นหรือไม่หากมีการวางท่อสองเส้นและตั้งค่าตัวเลือกพร้อมกัน - รองชนะเลิศจะเลือกงานจากการส่งครั้งแรกเสมอ?
Zufar Muhamadeev

ใช่ผู้วิ่งจะทำงานให้เสร็จใน p1 ก่อนที่จะประมวลผลงานจาก p2
RiWe

วิธีนี้ใช้ได้ผลจนถึงตอนนี้
Zufar Muhamadeev

0

ฉันคิดว่ามันสามารถดำเนินการผ่านneedsและresource_groupคำหลักและ gitlab API

predefined-variableงานทุกคนได้รับรหัสท่อที่มันเป็นเป็น หากคุณใช้ gitlab api คุณสามารถดูสถานะของงานอื่น ๆ ได้ในท่อ หากคุณสามารถใช้สถานะนี้needsและresource_groupคำหลักที่ฉันคิดว่าคุณสามารถบรรลุสิ่งที่คุณตั้งใจ ดูคำอธิบายของรหัสด้านล่างและความคิดเห็นสำหรับรายละเอียดเพิ่มเติม

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.

(ฉันไม่ได้ทดสอบด้วยตนเองดังนั้นวิธีนี้จึงจำเป็นต้องมีการตรวจสอบ)

Referenecs:


ขอบคุณสำหรับคำตอบ. หากฉันเข้าใจถูกต้องในtraffic_lightงานฉันควรรอให้การดำเนินการของ job1-3 เสร็จสิ้นในขั้นตอนที่เกิดขึ้นพร้อมกัน สิ่งที่ฉันไม่ชอบในวิธีนี้ - นาที ci ของคุณจะเสียเวลาในการตรวจสอบสถานะของไปป์ไลน์ที่เกิดขึ้นพร้อมกัน
Zufar Muhamadeev

หากคุณกังวลเกี่ยวกับนาที ci คุณสามารถใช้ gitlab-runner ที่โฮสต์ด้วยตนเองสำหรับการtraffic_lightใช้tagsคำหลัก traffic_lightเมฆผู้ขายหลายวันนี้ให้อินสแตนซ์ชั้นฟรีซึ่งมีเพียงพอที่จะเรียกใช้งานง่ายๆเช่นการรอคอย
aluc

ดูเหมือนว่า gitlab จะนับนาทีแม้กระทั่งนักวิ่งที่โฮสต์ด้วยตนเอง ฉันกำลังพยายามลองใหม่งานที่มีแท็กสำหรับนักวิ่งที่ดำเนินการด้วยตนเอง - แต่มันไม่เปิดตัวและแสดงข้อความเกี่ยวกับจำนวนนาทีของการส่งเกินขีด จำกัด : i.imgur.com/vBftxmk.png
Zufar Muhamadeev

1
หากเกี่ยวข้องกับปัญหานี้ ( gitlab.com/gitlab-org/gitlab-foss/issues/58942 ) ดูเหมือนว่านักวิ่งเฉพาะนั้นไม่ทำงานเมื่อโควต้าเกิน ฉันไม่แน่ใจว่าสิ่งนี้ชัดเจนหรือไม่ แต่นี่ไม่เกี่ยวข้องโดยตรงกับคำถามเดิมของคุณดังนั้นฉันขอแนะนำให้โพสต์คำถามแยกต่างหากที่นี่หรือบน gitlab
aluc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.