2014-07-17 53 views
5
Ben Jenkins Jenkins köle üzerinde docker içinde aşağıdaki komutu çalıştırmak için almaya çalışıyorum

bitirmek Docker komutu beklemiyor:Jenkins

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp -t mydockerimage /bin/bash -c "./setup_dev_env.sh && make all" 

sorun olduğunu ben Jenkins içinden bu çalıştırdığınızda Docker işlemi oluşturuldu, ancak Jenkins bunu beklemiyor ve başarıyı hemen döndürüyor. Ancak, Docker komutunu sonsuz döngü ile değiştirirsem, Jenkins beklendiği gibi bekler.

Bu komutu derhal inşa kullanıcısı olarak çalıştırdığımda, Jenkins kullanıcısı olarak, sistem komutun bitmesini bekler (bu benim olmasını istediğim şeydir).

docker attach yapmayı denedim, ancak bu hemen döner. docker wait, Jenkins'in bunun için beklemesine neden olacak, ancak çıktılardan hiçbirini görmeyeceğim.

Belki ... tüm yanlış bu konuda gidiyorum

  1. Nasıl bu komut bitmesini Jenkins beklemek alabilirim?
  2. Jenkins'i, docker kabında çalışan komutun çıktısını nasıl görüntüleyebilirim?
  3. Docker'daki komut çalıştırmasının çıkış kodunu, Jenkins'in başarılı olup olmadığını belirleyebilmesi için nasıl ayarlanmasını sağlayabilirim?

cevap

8

Bu sorun, komut satırında sorun olan -t idi. -t'un kaldırılması, Jenkins'in docker'ın yaptıklarını bitirmesini beklemesine neden oldu.

Durum böyle bir durumdaydı, çünkü ttys bazen garip olabilir ve Jenkins muhtemelen kabuk komutunda aynı komutu çalıştırdığımdan farklı bir tty (ya da hiç) kullanmıyor olabilir. Sonunda

bu komut çalıştı:

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp mydockerimage /bin/bash -c "./setup_dev_env.sh && make all" 
+0

ben bunun neden böyle açıklıyor herhangi cevabı kabul mutluyum ya varsa daha iyi bir yolu bu işlemek için. –

+2

t sözde bir tahsis edecektir, bu jenkins tty ile farklıdır. jenkins hemen başarıyı döndürecek. bu kadar – xds2000