fundo
Eu tenho uma equipe de controle de qualidade não técnico que precisa fazer testes em aplicativos iOS / Android para cada solicitação de recebimento (PR) criada pela minha equipe de back-end.
Questão
É isso que eu quero fazer: sempre que um engenheiro de back-end cria um PR no bitbucket, eu gostaria que um script implantasse automaticamente o código dessa ramificação PR git em um subdomínio do servidor de desenvolvimento que corresponda ao problema do JIRA criado.
Por exemplo, suponha que o problema de jira que o PR soluciona seja o BAC-421 e, assim que o engenheiro criar um PR, o script implanta o código que eles criaram no AWS EC2 para que o controle de qualidade possa apontar seus aplicativos para www.bac421.mydevdomain. com
Qual é a melhor maneira de fazer isso? Eu sou um nube técnico de devops.
Atualização - Especificações do ambiente
então, aqui está uma descrição do nosso ambiente - o back-end usa o laravel 5.3 - ele é implantado no AWS EC2 - usamos o forge para implantação automática (nada sofisticado .. apenas executamos este script:
cd /home/forge/default
git fetch --tags
git pull origin master
git describe
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php7.1-fpm reload
if [ -f artisan ]
then
php artisan migrate --force
php artisan config:cache
php artisan queue:restart
fi
que executamos assim que mesclamos o dev ao master branch) - além de não usarmos nenhuma ferramenta de CI / CD, embora esteja aberto a recomendações - o provedor DNS é GoDaddy - nosso servidor de aplicativos é nginx - nosso banco de dados está em um instância separada do RDS
fonte
Respostas:
Fazemos isso no trabalho.
Temos um servidor pequeno, vamos chamá-lo de receptor, é o alvo dos eventos de webhook do GitHub . Ele executa um pequeno aplicativo que analisa a carga útil e incorpora a lógica de como proceder, por exemplo, criar um novo servidor no provedor de infraestrutura, atualizar o balanceador de carga, implantar em um servidor existente, destruir o servidor etc. Isso poderia ser um aplicativo da Web tradicional que serve uma API ou pode ser um aplicativo sem servidor, você decide como deseja abordá-lo.
O receptor é relativamente simples de lidar, os outros sistemas de suporte necessários são uma abordagem para gerenciamento / provisionamento de configuração (como o servidor possui os pacotes necessários para executar o aplicativo), gerenciamento de segredos (como o servidor obtém acesso a informações confidenciais) e roteamento (como os subdomínios são atualizados e encaminhados para o servidor correto).
Pode valer a pena preparar uma AMI com os serviços necessários configurados, um modelo CloudFormation com a lógica de provisionamento de infraestrutura e o CodeDeploy pode lidar com implantações para você.
Gerenciamento de configurações
Isso depende de você e da sua equipe, há uma infinidade de ferramentas que você pode usar ou pode simplesmente confiar no script de shell. Em que momento do ciclo de vida dos servidores você aplica as alterações, é discutido no artigo de design da AMI que eu vinculei.
Gestão de Segredos
Esse é um tópico desafiador para abordar com as informações em mãos. No interesse da brevidade, deixarei isso para você e sua equipe.
Encaminhamento
Existem algumas maneiras de lidar com o roteamento, o Application Load Balancer (que não deve ser confundido com o ELB / NLB) oferecido pela AWS oferece suporte ao roteamento baseado em host . Como alternativa, você pode usar um proxy reverso como NGINX ou HAProxy. Ao provisionar um novo ambiente, você precisará atualizar esse roteamento (idealmente automaticamente), independentemente da abordagem adotada.
Não se esqueça de considerar como lidará com a camada de banco de dados / persistência e zero implantações de tempo de inatividade. A pergunta a ser feita com a camada de persistência é se a equipe compartilhará um banco de dados e como isso irá interagir com coisas como migrações. No tópico de zero implantações de tempo de inatividade, o CodeDeploy deve lidar com isso muito bem para você. Mais uma coisa, você mencionou um único aplicativo móvel apontando para diferentes ambientes, como você apontará esses aplicativos para os ambientes.
fonte
essa configuração funcionou perfeitamente para mim usando o aws code deploy:
fonte