/ / Jenkins não está esperando o comando do Docker terminar - jenkins, docker

Jenkins não está esperando o comando do Docker terminar - jenkins, docker

Eu estou tentando obter Jenkins para executar o seguinte comando dentro do Docker em um escravo Jenkins:

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

O problema é que quando eu corro de dentro de Jenkins o processo do Docker é gerado, mas o Jenkins não espera por ele e retorna o sucesso imediatamente. Se, no entanto, eu substituir o comando do Docker por um loop infinito, o Jenkins aguardará, como esperado.

Quando executo este comando diretamente do escravo de construção, como o usuário Jenkins, o sistema aguarda que o comando seja concluído (que é o que eu quero que aconteça).

Eu tentei fazer um docker attach, mas isso também retorna imediatamente. docker wait fará com que Jenkins espere por isso, mas eu não verei nada da saída.

Talvez eu esteja fazendo tudo errado ...

  1. Como posso fazer com que Jenkins espere que esse comando termine?
  2. Como posso fazer com que Jenkins exiba a saída do comando em execução no contêiner docker?
  3. Como posso obter o código de saída do comando executado no Docker para que seja configurado de forma que o Jenkins possa determinar se foi bem-sucedido ou não?

Respostas:

8 para resposta № 1

Acontece que o problema era o -t na linha de comando. Removendo -t fez com que Jenkins esperasse que o docker terminasse o que estava fazendo.

Eu tive um palpite, este foi o caso porque ttys podeàs vezes ser estranho e Jenkins provavelmente está usando um tipo diferente de tty (ou não) do que quando estou executando o mesmo comando no prompt do shell.

No final, esse comando funcionou:

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