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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.