Jenkins'te her ikisi de aynı parametreye ihtiyaç duyan iki işim var.
İlk işi bir parametre ile nasıl çalıştırabilirim, böylece ikinci işi tetiklediğinde aynı parametre kullanılır?
Jenkins'te her ikisi de aynı parametreye ihtiyaç duyan iki işim var.
İlk işi bir parametre ile nasıl çalıştırabilirim, böylece ikinci işi tetiklediğinde aynı parametre kullanılır?
Yanıtlar:
Parametreleri bir görevden diğerine aktarmanıza izin veren Parametreli Tetik Eklentisini kullanabilirsiniz .
Ayrıca aşağı akışta yukarı akıştan geçirdiğiniz bu parametreyi de eklemeniz gerekir.
1. Post-Build Eylemleri> "Diğer projelerde parametreleştirilmiş derlemeyi tetikle" seçeneğini belirleyin
2. value ile ortam değişkenini girin.Value ayrıca Jenkins Build Parameters olabilir.
Ayrıntılı adımlar burada görülebilir: -
Umarım yardımcı olur :)
Kabul cevabı burada kullanım örneği için çalışmaz. Bir işte dinamik olarak parametreler oluşturabilmem ve bunları diğerine aktarabilmem gerekiyordu. As Mark McKenna sonrası inşa eylemlerine bir kabuk yapı adımdan bir değişkeni dışa yolu görünüşte yoktur bahseder.
Parametreli Tetik Eklentisini kullanarak değerleri bir dosyaya yazarak ve bu dosyayı 'Derleme sonrası eylem ekle' -> 'Parametreli yapıyı tetikle ...' ve ardından 'Parametre Ekle'yi seçerek içe aktarılacak parametreler olarak kullanarak bir geçici çözüm elde ettim - > 'Özellikler dosyasından parametreler'.
Sanırım yukarıdaki cevabın biraz güncellenmesi gerekiyor:
Yukarı akış derleme yapılarımı depolamak için dinamik bir dizin oluşturmaya çalışıyordum, bu nedenle yukarı akış iş oluşturma numaramı aşağı akış işine geçirmek istedim, yukarıdaki adımları denedim ancak çalışmasını sağlayamadım. İşte böyle çalıştı:
Bunun nedeni, jenkins'in yeni sürümünün, aşağı akış işinde de değişkeni tanımlamanızı gerektirmesidir. Umarım yardımcı olur.
(Google çalışanları için)
Build Flow Plugin ile ciddi bir ardışık düzen oluşturuyorsanız , parametreleri DSL ile işler arasında şu şekilde geçirebilirsiniz:
Diğer işlere aktarmak için kullanılabilir bir "CVS_TAG" dize parametresi varsayarsak:
build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
// will be scheduled in parallel.
{ build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
{ build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])
Mevcut değişkenleri / parametreleri görüntülemek için ipucu:
// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
Henüz yorum yapamadığım için Nigel Kirby'nin yanı sıra cevabımı eklemen yeterli:
Dinamik olarak oluşturulmuş bir parametreyi geçirmek için, değişkeni 'Kabuğu Çalıştır' kutucuğuna dışa aktarabilir ve ardından onu 'Diğer projelerde parametreleştirilmiş yapıyı tetikle' => 'Önceden tanımlanmış parametreler "=>' YOUR_VAR = $ YOUR_VAR 'verebilirsiniz. Ekibim bu özelliği, npm paket sürümünü derleme işinden dağıtım işlerine geçirmek için kullanıyor
GÜNCELLEME: Yukarıdaki yalnızca Jenkins'in enjekte ettiği parametreler için çalışır, kabuktan oluşturulan parametrenin yine de aynı yöntemi kullanması gerekir. Örneğin. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties ve bu dosyayı aşağı akışa aktar
Aşağı akışlı bir Rundeck işine bir pom sürümünü geçirmem gerektiğinde aynı sorunla karşılaştım.
Yaptığım şey, aşağıdaki gibi bir özellikler dosyası aracılığıyla parametre enjeksiyonu kullanmaktı:
1) Özellikler dosyasında kabuk aracılığıyla özellikler oluşturma:
Eylemler oluşturun:
Örneğin: özellik tanımı
2) Tanımlanan özellikleri aşağı akış işine geçirme: Derleme Sonrası İşlemler:
Örneğin: gönderen özellikler
3) Daha sonra aşağı akış Rundeck işinde olduğu gibi $ POM_VERSION kullanmak mümkün oldu.
/! \ Jenkins Sürüm: 1.636
/! \ Tetiklenen yapıyı oluştururken bazı nedenlerden dolayı, özellikleri geçmek için 'Mevcut yapı parametreleri' seçeneğini eklemek gerekiyordu.
Cevapları okurken sevdiğim başka bir seçenek de görmüyorum, bu yüzden de sunacak. İşlerin parametrelendirilmesini seviyorum ama her zaman iyi ölçeklenmiyor. Doğrudan ilk işin aşağı akışında olmayan ancak boru hattının daha aşağısında olan işleriniz varsa, parametreleri baştan sona geçirebilmek için boru hattındaki her işi gerçekten parametrelendirmek istemezsiniz. Veya çeşitli diğer işler tarafından kullanılan çok sayıda parametreniz varsa (özellikle bir ana işe veya ana işe bağlı olmayanlar), yine parametrelendirme çalışmaz.
Bu durumlarda, değerleri bir özellikler dosyasına yazdırmayı ve ardından EnvInject eklentisini kullanarak ihtiyacım olan her işte bunu enjekte etmeyi tercih ederim . Bu dinamik olarak yapılabilir, bu da parametreleştirilmiş işlerin hala kullanıldığı yukarıdaki başka bir cevaptan sorunu çözmenin başka bir yoludur. Bu çözüm birçok senaryoda çok iyi ölçeklenir.
Bunu yapmak için Hudson Groovy builder'ı kullanabilirsiniz.
Boru hattındaki ilk iş
Boru hattındaki ikinci iş
Bunu anladım!
Neredeyse 2 saatlik deneme yanılma ile anladım.
Bu ÇALIŞIR ve değişkenleri uzak işe geçirmek için yaptığınız şeydir:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")
Boşluk olmadan iki parametreyi ayırmak için \ n kullanın.
Parametrelerin aksine: '' 'someparam'lar' ''
parametreleri kullanıyoruz: "someparams"
"..." bize istenen değişkenlerin değerlerini veren şeydir. (Bunlar çift tırnaktır, iki tek tırnak değil)
'' '...' '' veya '...' bize bu değerleri vermeyecektir. (Üç tek tırnak veya yalnızca tek tırnak)
Buradaki tüm parametreler, boru hattının başlangıcında {} ortamı bloğunda tanımlanır ve gerektiğinde aşamalar> adımlar> komut dosyaları şeklinde değiştirilir.
Ayrıca test ettim ve "..." kullandığınızda "" ... "..." "'' veya" ... "..'..." gibi bir şeyi veya o...
Buradaki püf noktası, parametreler bölümünde "..." kullandığınızda, bir dize parametresini geçemezsiniz; örneğin Bu ÇALIŞMAZ:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")
Yukarıdakine benzer bir şeyi geçmek istiyorsanız, bir ortam değişkeni param2 = 'param2' ayarlamanız ve ardından uzaktan tetikleme eklentisi adımının parametreler bölümünde $ {env.param2} kullanmanız gerekir.