No pipeline do Jenkins, usando o Groovy DSL, como faço para girar uma imagem do Docker em segundo plano?

1

Tivemos um sistema de criação do Jenkins, usando o Groovy DSL, que funcionou bem para nós.

Mas, recentemente, contratamos um novo desenvolvedor que deveria ser muito bom. Ele decidiu reescrever a maneira como nossos testes funcionam. Estamos agora tentando fazer com que nosso processo de construção se ajuste às novas idéias dele. Nós temos um aplicativo Python. Anteriormente, nosso sistema de compilação era mais ou menos assim:

git pull

executar testes

se estiver bom, empurre para ECR

Simples.

Mas ele colocou todos os testes em um recipiente separado. Então agora eu preciso fazer algo como:

  1. 'docker build' o aplicativo principal

  2. 'docker run' o aplicativo principal

  3. 'docker build' o aplicativo de teste

  4. 'docker run' o aplicativo de teste (isso dispara solicitações HTTP no aplicativo principal)

  5. obtenha resultados do aplicativo de teste

  6. encerre o aplicativo principal

  7. se os resultados do teste forem bons, pressione para ECR

Mas quando eu chamo 'docker run' no aplicativo principal, ele é executado para sempre. É um aplicativo da web em Python, o Django, com o Gunicorn atendendo as solicitações da web.

Então, o que eu faço aqui? Devo girar o aplicativo principal em um segmento separado, talvez com um tempo para matá-lo automaticamente após um determinado período de tempo?

    
por JeffGallant 26.07.2018 / 15:45

1 resposta

0

Você está executando docker run -d ... com o parâmetro -d para desanexar do contêiner? Poderia ser esse o problema?

Editar

Acho que você terá que executar docker run -d para desanexar do contêiner, caso contrário, ele permanecerá no primeiro contêiner mostrando STDOUT até que Jenkins mate o contêiner quando ele parar o trabalho. Eu acabei de executá-los e dar-lhes um nome e, em seguida, no final do trabalho Jenkins, pare e remova todos os recipientes com esse nome.

Ex:

docker run -d --name jenkins-main-app main-app 
docker run -d --name jenkins-test-app test-app 

Então, no final:

docker stop --name jenkins-main-app
docker stop --name jenkins-test-app
docker rm --name jenkins-main-app
docker rm --name jenkins-test-app

Espero que ajude.

    
por 26.07.2018 / 17:26