como criar automaticamente um subdomínio para cada solicitação pull


9

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


1
Como você implementa seu software atualmente? Quais ferramentas de CI ou CD você usa? Quem é o seu provedor de DNS?
user2640621

Sim. Existem várias maneiras de esfolar esse gato - incluindo, sem limitação, a atualização de um arquivo hosts, mas precisaríamos saber mais sobre o seu ambiente.
perfil completo de James Shewey

resposta atualizada @ user2640621
abbood

Respostas:


3

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.


Há muito suco em sua resposta. Você pode dividir um pouco? Por exemplo, nas diferentes seções que você mencionou ... você pode me dar algo para começar em cada uma delas?
abbood

Existe alguma relação entre o usuário que postou esta resposta e esse usuário ? Aposto que eles são da mesma "user" ... Se por isso, ter ambas as contas fundiu ...
Pierre.Vriens

1

essa configuração funcionou perfeitamente para mim usando o aws code deploy:

insira a descrição da imagem aqui

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.