Ardışık düzen içinde birden çok işi paralel olarak paralel olarak çalıştırabilirsiniz. Ancak paralel çalışan işlerin sayısını sınırlamak istiyorsanız ne yapmalısınız?
Örneğin, paralel olarak çalıştırılması gereken 10 iş vardır, ancak mevcut kaynaklar sınırlıdır ve aynı anda en fazla 3 tane çalışmasına izin verilir Bu durumda, bu gereksinimi karşılamak için Jenkins dosyasını nasıl değiştirmeliyim?
Kendi keşfim sayesinde aşağıdaki yöntemlerin kullanılabileceğini buldum.
Aşağıdaki şekilde 6 iş vardır, test1-test6 Bu 6 işin paralel olarak çalışması beklenir, ancak bir seferde sadece 2 iş paralel olarak çalışabilir.
Doğrudan Jenkinsfile koduna gidin:
boru hattı {
ajan herhangi biri
aşamalar {
stage ("paralel test") {
adımlar {
senaryo {
def dalları =
MAX_CONCURRENT = 2
// fifo oluştur
latch = new java.util.concurrent.LinkedBlockingDeque (MAX_CONCURRENT)
// fifo'da, maksimum öğe sayısını doldurun
for (int i = 0; i < MAX_CURRENT; i ++)
latch.offer ("$ i")
def job_list =
for (int i = 0; i < job_list.size; i ++) {
def name = job_list
dallar = {
def şey =
kadar bekleyin {
// Bir kaynak alın
şey = latch.pollFirst;
dönüş şey! =;
}
Deneyin {
// İşi yürüt
build (job: name, propagate: false)
}
en sonunda {
// Bir kaynağı serbest bırak
latch.offer (şey)
}
timestamps {
paralel dallar
Esasen, LinkedBlockingDeque sınıfı java kullanılır.Aşağıdaki web sitesi bu sınıfı tanıtır:
Yukarıdaki kodu ardışık düzen iş yapılandırmasının ardışık düzen seçenek kutusuna yazın. Groovy Sandbox Kullan seçeneğinin işaretlenemeyeceğini unutmayın.
Elbette, kodu Jenkinsfile dosyasına da yazabilir ve ardından işin yürütmesi gereken Jenkins dosyasını çalıştırabilirsiniz.
Yürütme günlüğü aşağıdaki gibidir, ilk önce test1 ve test2 yürütülür, kaynaklar elde edilebilir ve yürütülebilir ve sonraki işler kaynakları elde edemez ve ardından bloke edilir.
Test1 ve test2 yürütüldükten sonra kaynaklar serbest bırakılacak, test3 ve test4 kaynakları alacak ve ardından yürütmeye başlayacaktır.
Çalıştırıldıktan sonra blueocean aşağıdaki gibi görüntülenir:
Blueocean'dan test1 ve test6'nın paralel olarak yürütüldüğü, ancak gerçek ortamda aynı anda yürütülemedikleri görülebilir.
İş teklifleri