Quais são as alternativas para o uso do Docker no Docker (dind) para o escravo Jenkins em execução no contêiner?

7

Ao usar o escravo Jenkins em execução no contêiner, quais são as alternativas ou implementações "seguras" (em termos de segurança) para o Docker no Docker .

Exemplo de arquitetura:

  1. Mestre Jenkins em execução como contêiner Docker
  2. Escravo Jenkins em execução como contêiner Docker
  3. Tarefa de teste executada no contêiner Docker

Algumas alternativas conhecidas:

Esclarecimento das restrições: a idéia é usar Jenkins como orquestrador e Docker para um ambiente limpo, o restante da arquitetura está sujeito a alterações.

rombob
fonte
2
Obrigado pela pergunta, você me ensinou Docker-in-docker- para todos os que são novos no tópico, vale a pena ler a descrição de vantagens e desvantagens de Jérôme Petazzoni .
Richard Slater
11
@RichardSlater Depende de como as cargas de trabalho são definidas (tarefas / dia, escravos / mestre, CPU, dados / tarefa), mas a questão é mais geral. Todos os listados segurança, tartarugas, desempenho são candidatos legítimos a serem evitadas, assim como o cheiro de "corte hackity" mencionado em "A descrição de Jérôme Petazzoni de vantagens e desvantagens de ..."
rombob
11
Não, ainda não está claro se sua arquitetura ainda precisa confiar nos escravos jenkins dentro da janela de encaixe ou não. De qualquer forma, os truques para ruby ​​/ python / java com várias versões nos mesmos hosts (ou imagem do docker FWIW) são bem conhecidos, os do nodejs ou Go são menos "comuns" e menos fáceis de configurar. Então, eu estou realmente insegura da maneira como você se abre e com quem você não. Se o plano ainda é ter jenkins como orquestrador e Docker para um ambiente limpo, há um lugar para responder; se os escravos tiverem que estar em um ambiente de docker, tudo será um truque feio que você não pode confiar nos resultados dos testes.
Tensibai 27/03
11
@Tensibai obrigado por direcionar os esclarecimentos sobre a questão, meu objetivo era manter mais geral a possibilidade de deixar mais espaço para a criatividade nas respostas, incluindo as coisas que você mencionou. Quanto a casos específicos, truques são conhecidos e estão sendo usados, a oportunidade que o Docker oferece é ter uma maneira de implementação para todos os tipos de cargas de trabalho, se possível, tente se concentrar em torná-lo estável e seguro.
rombob
11
@Tensibai Obrigado pelo feedback, esclarecimentos adicionados à pergunta.
rombob

Respostas:

5

Para evitar a dependência dind(de criar novas imagens a partir de um arquivo docker, o que deve ser bom), eu procuraria o plugin kubernetes do Jenkins .

Obviamente, ele precisa dar vida a um cluster de kubernetes, mas permitir que um agente jenkins único execute o teste em um ambiente isolado limpo e depois o retire. Os custos de manutenção do cluster kubernetes não devem ser maiores do que manter seus escravos Jenkins.

O ponto positivo é que você pode criar uma versão de escravos com um ambiente específico e não precisar mexer na versão múltipla de ruby ​​/ java / python e deixar a tarefa escolher o "ambiente" adequado, especificando a imagem do agente a ser usada e ter um pronto para testar o ambiente sem qualquer pré-teste de ajustes.

Eu iria para o kurbenetes como agendador de contêineres, porque é relativamente leve para configurar e manter.

Tensibai
fonte
excelente abordagem, como um mesos alternativas, enxame pode ser usado, IMO enxame é um grande candidato apenas por causa de manutenção relativamente fácil, mas pode vir com preço de estabilidade, tecnologia muito fresco
rombob
@rombob de fato, e o mesos é bastante pesado para manter e provavelmente exagerado para este caso de uso, eu queria saber se declarar essa comparação / ponto faria sentido nesta resposta.
Tensibai 28/03
talvez comparação seria grande candidato para uma nova pergunta
rombob
@rombob Geralmente eles acabam sendo úteis muito rapidamente, especialmente com enxame em desenvolvimento ativo, ele precisaria de uma atualização quase toda semana. Assim, gostaria de evitá-lo, mesmo um blog não é muito claro sobre a questão depois de toda uma lista ou pro / contras
Tensibai
Ao usar o plug-in Jenkins Kubernetes, como você escolhe dinamicamente um contêiner para incorporar. Eu uso o plug-in Jenkins Kubernetes, mas continuo usando dind porque quero criar contêineres internos. Eu tenho um contêiner de escravos com sujeira, mas tem que haver uma maneira melhor.
David West