No momento, nossos agentes Jenkins geram um docker-compose.yml para cada um de nossos projetos Rails e, em seguida, executam docker-compose up. O docker-compose.yml tem um contêiner "web" principal que contém o rbenv e todas as outras dependências do Rails. Ele está vinculado a um contêiner de banco de dados que contém o banco de dados Postgres de teste.
O problema surge quando precisamos realmente executar os testes e gerar códigos de saída. Nosso servidor de CI só será implantado se o script de teste retornar a saída 0, mas docker-compose sempre retorna 0, mesmo se um dos comandos do contêiner falhar.
O outro problema é que o contêiner de banco de dados é executado indefinidamente, mesmo depois que o contêiner da web termina de executar os testes, portanto, docker-compose up
nunca retorna.
Existe uma maneira de usar docker-compose para esse processo? Precisaríamos ser capazes de executar os contêineres, mas sair depois que o contêiner da web for concluído e retornar seu código de saída. No momento, estamos travados manualmente usando o docker para ativar o contêiner DB e executar o contêiner da web com a opção --link.
docker-compose
1.12.0 e superior. Talvez seja o seu caso também. Um exemplo poderia ser:docker-compose up --exit-code-from test-unit
. Observe que não funcionou para mim até que eu adicionei umset -e
no início do meu script.