Estou tentando implementar o pipeline de CI / CD para o meu projeto usando Docker, Kubernetes e Jenkins. Meu aplicativo é um aplicativo multilocatário, no qual as variáveis do aplicativo de banco de dados são diferentes para diferentes inquilinos.
Estratégia de Aplicação
Quando estou criando uma imagem do Docker, estou usando um Dockerfile. E eu mantenho meu Dockerfile dentro do meu repositório de código SVN. Para cada inquilino, o repositório de código é o mesmo. Quando estou construindo uma imagem, naquele momento preciso criar imagens diferentes para diferentes inquilinos.
Implementação de Dockerfile
No meu arquivo docker, estou adicionando um ponto de entrada como o seguinte,
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Se eu precisar criar uma imagem do Docker para outro inquilino, preciso adicionar
-Dspring.profiles.active=tenant2config
Portanto, o ponto de entrada no Dockerfile é dinâmico.
Minha confusão
- Para gerenciar o comando do ponto de entrada no Dockerfile é possível dinamicamente?
- Ou Preciso adicionar outro Dockerfile para outro inquilino? E precisa executar o comando docker build separadamente para inquilino separado?
Como posso encontrar uma boa maneira padrão de implementação desse problema?
ENTRYPOINT
ie, em... -Dspring.profiles.active=${TENANT}
seguida, definir o ambiente correto durante suas implantações.