Belirli bir Jenkins işi için "killSoftly" nasıl ayarlanır?


11

Jenkins derlemem derleme ve derleme sonrası adımlar arasında asılı kalır.

Konsol çıkışı 6 dakikalık bir bekleme olduğunu gösteriyor (ancak bir saate kadar bekledim):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

Bulduğum bu ve bu benzeri sorunları var soruları ve bunlar çözüm ayarlıyor demek -DSoftKillWaitSeconds=0de jenkins.xml.

Ancak, global Jenkins ayarları ile uğraşmadan, sadece belirli işler için seçeneği ayarlamak için bir yol gerekir (diğer projeler ile karışıklık istemem).

DÜZENLE:

[CucumberReport] adımından önce işi el ile iptal ettiğimde, Salatalık raporları yine de oluşturulur.

Ayrıca , Zaman Aşımı stratejisi (Zaman Aşımı saniye = 2) olarak ayarlandığında Yapı Ortamı seçeneklerinde sıkışmışsa yapıyı iptal et seçeneğini işaretledim No Activity.

Projeyi bu ayarlarla oluşturduğumda, derleme Geçmiş'te gösterildiği gibi "0 saniye sonra iptal edildi" ile başarısız olur, ancak konsol çıktısı aynı olur. (Hiçbir şey değişmez, Salatalık Raporları oluşturulur, ancak belirli bir zaman aşımından sonra).


Parametre ile neyi başarmak istiyorsunuz? Belki bunun için daha kolay bir çözüm var.
Michael Kemmerzell

İnşa aşamasından sonra bekleme süresini kısaltmak istiyorum. Konsol çıkışından da görebileceğiniz gibi, derleme ve derleme sonrası adımlar arasında 6 dakikalık bir bekleme var.
Mate Mrše

Boru hattınızın bazı kısımlarını sağlayabilir misiniz? Şüphe yok ki jenkinler basitçe sıkışmış durumda - burada bir şeyler olmalı.
Michael Kemmerzell

Gerçek kodu paylaşamadığım için bazılarını düzenleyip paylaşabilmem için boru hattının hangi bölümlerinin ilgi çekici olacağı konusunda daha spesifik olabilir misiniz?
Mate Mrše

Borunuzda sadece bir timeoutseçenek belirleyemiyor musunuz? Kesinlikle borunuzun basitleştirilmiş bir versiyonunu göndermelisiniz. Neyin yanlış olabileceğini "tahmin etmek" zor. Ayrıca, bu soru muhtemelen devops.stackexchange.com
tftd

Yanıtlar:


4

İçin işe özgü bir değer seçmek mümkün değildirSoftKillWaitSeconds (değer, iş adının bilinmediği bir noktada Jenkins çekirdeğinden türetilir ).

Benim tavsiyem, işinizdeki iptal işlemini düzeltmek , bu yüzden "yumuşak öldürme zaman aşımına" bağlı olmayacak. Unix-ish sisteminde çalışıyorsanız, işinizi yeni bir işlem grubunda ( set -mbash) çalıştırarak ve (örneğin) uygun bir çıkış tuzağı kurarak bunu sağlayabilirsiniz.


Jenkins için yeni olduğum için, "işinizi yeni bir süreç grubunda yürütme (set -m in bash) ve (örneğin) uygun bir çıkış tuzağı kurma" konusunu genişletebilir misiniz?
Mate Mrše

Bu Jenkins per-se ile ilgisizdir. İşiniz bir "Kabuğu yürüt" oluşturma adımı içeriyorsa (veya bunu değiştirebiliyorsanız) bu yaklaşımı kullanabilirsiniz. Ardından yeni bir işlem grubu oluşturmak için "set -m" kullanın ve gruptaki tüm işlemlerin öldürülmesini sağlamak için burada gösterildiği gibi bir tuzak kullanın .
Alex O

3

Zaman aşımı stratejisi No Activityveya olarak ayarlanmış sıkışmış işleri öldürmek için Build-timeout eklentisini kullanıyoruz Absolute. Benim için, serbest stil projeleri kullanırken bu iyi bir yaklaşım. Yapınızın "0 saniye sonra durdurulmasının" nedeni büyük olasılıkla tamamlanmamış alt süreçler olmasıdır. Gönderen belgeler :

Java, bir yapının nasıl askıda kaldığına bağlı olarak, iş parçacıklarının yalnızca bir dizi sabit konumda kesilmesine izin verdiğinden, iptal işlemi etkili olmayabilir. Örneğin,

  • Jenkins çocuk süreçlerinin tamamlanmasını bekliyorsa hemen iptal edilebilir.
  • Jenkins sonsuz bir döngüye sıkışmışsa, asla iptal edilemez.
  • Jenkins Java VM'de bir ağ veya dosya G / Ç işlemi yapıyorsa (uzun dosya kopyası veya SVN güncellemesi gibi), iptal edilemez.

Mutlak zaman aşımı stratejisini deneyebilirsiniz. İşlerde zaman aşımı değerini tekrarlamamanız için genel bir değişken tanımlayabilirsiniz:

  1. "Jenkins'i Yönet"> "Sistemi Yapılandır" a gidin.
  2. "Global özellikler" bölümünde "Ortam değişkenleri" ni kontrol edin.
  3. Bir ortam değişkeni adı = "GLOBAL_TIMEOUT_MINUTES" değeri = "20" ekleyin.
  4. Bir projenin yapılandırma sayfasına gidin.
  5. "Oluşturma Ortamı" bölümünde "Yapıştırılmışsa yapıyı iptal et" seçeneğini işaretleyin.
  6. "Zaman aşımı stratejisi" için "Mutlak" ı seçin. Tabii ki, diğer stratejiler için de geçerlidir.
  7. "Zaman Aşımı" için "$ {GLOBAL_TIMEOUT_MINUTES}" değerini ayarlayın.
  8. "Derlemeyi iptal et" zaman aşımı işlemini ayarlayın.

Bu işe yaramazsa, https: // your-jenkins-server / log günlüklerine veya bir iş parçacığı dökümüne bakmayı deneyebilirsiniz .
Askıya alma bir eklentinin yeni / eski sürümünden kaynaklanabilir. Bitmemiş çocuk süreçlerinin neler olduğunu bulmaya çalışın. Sorunun nedeni olabilecek eylemi bulmak için derleme sonrası işlemleri tek tek devre dışı bırakmayı deneyin. Görebilirsiniz /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs


Ancak yararlı bilgiler için oy verdim, sorunumu çözmüyor. Zaten zaman aşımı eklentisi oluşturmayı denedim ama başarılı olamadım.
Mate Mrše
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.