Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao trabalhar com pipelines de integração contínua que usam Docker como ambiente de build, uma necessidade constante é executar scripts externos ao container, especialmente para tarefas de setup ou deploy que dependem de configurações específicas do ambiente local. Essa prática, embora comum, traz desafios que vão desde questões de segurança até impacto na performance do pipeline.
A maioria das plataformas de CI que utilizam Docker possui limitações na execução de scripts fora do container, já que o isolamento do Docker é uma de suas principais vantagens. No entanto, para tarefas de deploy ou configuração, muitas equipes preferem rodar scripts que estão fora do ambiente do container, por exemplo, scripts de setup de infraestrutura ou configuração de ambiente local.
O problema surge quando tentamos integrar esses scripts externos no fluxo automatizado, especialmente ao usar imagens específicas, como a docker:stable, que é minimalista e não possui ferramentas de shell ou acesso ao sistema operacional host. Assim, a questão é: como executar de forma segura e eficiente esses scripts externos dentro de um pipeline Docker? Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Uma abordagem comum é montar volumes compartilhados entre o host e o container de CI. Assim, o pipeline pode mapear o diretório onde o script externo reside para dentro do container, permitindo sua execução.
before_script:
- docker run -d --name runner -v $(pwd)/scripts:/scripts docker:stable tail -f /dev/null
- docker exec runner chmod +x /scripts/startup.sh
- docker exec runner /scripts/startup.sh
Essa estratégia garante que o script externo seja acessível e executável dentro do container, mantendo a separação de ambientes.
docker run ou docker execSe o pipeline já utiliza docker-in-docker, pode-se iniciar o container de build e, posteriormente, usar docker exec para rodar o script externo, que foi preparado previamente no host ou em um volume compartilhado. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Outra alternativa é criar uma imagem Docker customizada que já inclui o script necessário. Assim, o pipeline trabalha com uma imagem que já possui tudo preparado, eliminando a necessidade de scripts externos. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
FROM docker:stable
COPY startup.sh /usr/local/bin/startup.sh
RUN chmod +x /usr/local/bin/startup.sh O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Depois, basta referenciar essa imagem no pipeline.
1. Avalie se realmente precisa rodar scripts externos ou se é possível incorporar a lógica ao próprio container.
2. Configure volumes compartilhados de forma segura, limitando acessos e verificando integridade.
3. Prefira criar imagens Docker customizadas com scripts embutidos, para maior controle.
4. Teste em ambientes controlados antes de implementar em produção para evitar falhas inesperadas.
Executar scripts externos no ciclo de build Docker não é uma tarefa trivial, mas com o uso correto de volumes, containers e imagens customizadas, é possível manter o fluxo automatizado eficiente, seguro e de fácil manutenção. O segredo está em balancear conveniência e segurança, garantindo que o pipeline não vire uma fonte de vulnerabilidades ou instabilidades. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Concordo, Nicolas. Eu faço sempre validação de scripts antes de montar, e uso ambientes de teste pra validar o impacto. Mas realmente, é preciso cuidado pra não abrir brechas.
A minha dúvida é sempre sobre segurança ao montar volumes. Como cuidar para que scripts externos não comprometam o ambiente? Já passei por isso e é um ponto que pesa bastante na decisão.
Se for usar volumes, cuidado com permissões. Uma configuração mal feita pode dar acesso a scripts que não deveriam rodar no ambiente de produção.
No meu time, criamos imagens customizadas com tudo pré-includío, assim a gente evita montar volumes toda hora. Pode ser mais trabalhoso, mas garante maior controle.