Existem 2 plataformas mais populares hoje para hospedar sites estáticos: Netlify e Google App Engine (GAE) O Netlify ganhou muita popularidade recentemente porque fornece experiência integrada com a construção e implantação de sites estáticos, tudo na mesma plataforma. O GAE é mais flexível em termos de suporte a sites não estáticos, mas certamente não possui o nível de integração que o Netlify oferece. Então, por que eu ainda usaria o GAE em muitos casos? A resposta é simples: frequentemente, o GAE oferece melhores opções de preços. Ao mesmo tempo, permite ter todos os recursos do Netlify e muito mais usando algumas ferramentas simples (GitHub Actions e Reliza Hub) que descreverei neste artigo Preços Deixe-me primeiro abordar os cenários de preços quando a combinação GAE + GitHub Actions faz mais sentido. O ponto chave são os minutos de compilação. O nível gratuito do Netlify oferece apenas 300 minutos de compilação por mês, o que não é muito, de forma alguma. Se você estiver usando algo como o aplicativo node.js tornado estático e suas compilações levarem de 2 a 3 minutos em média, você obterá apenas mais de 100 compilações por mês no Netlify, o que facilmente pode não ser suficiente. Especialmente se você tiver mais de um site Se você precisar de mais minutos de compilação no Netlify, pague US $ 7 por 500 minutos extras ou passe para o próximo nível, que inclui 1.000 minutos, mas custa US $ 45 / mês. Por outro lado, no GitHub Actions você obtém 2.000 minutos de compilação gratuitos para repositórios privados e minutos de compilação ilimitados para repositórios públicos. Digamos que você esteja criando um site de documentação e decida torná-lo público no GitHub âÃÂàvocê obtém minutos de compilação ilimitados no GitHub Actions âÃÂàe isso torna uma grande diferença A próxima consideração são os custos de tráfego. O Netlify fornece saída de largura de banda de 100 GB por mês incluída em seu nível gratuito, o que é generoso. O Google oferece 1 GB de saída por dia grátis, o que o torna cerca de 30 GB por mês. Portanto, se sua saída estiver entre 30 GB e 100 GB, você poderá obter um acordo melhor no Netlify. No entanto, depois de ultrapassar 100 GB, o Netlify cobra US $ 20 pelos próximos 100 GB naquele mês imediatamente. O Google tem uma política de preços por saída de GB que custa US$ 0,12. Significa que você paga $ 12/100GB âÃÂàvs $ 20/100GB no Netlify Portanto, dependendo do tráfego, você pode ser melhor no Netlify ou no GAE do futuro egresso. Mas, em muitos casos, o GAE forneceria melhor valor aqui também Palavra final sobre preços âÃÂàse você estiver usando algo como GitHub Actions ou CircleCI para suas compilações, você ainda pode implantar no Netlify âÃÂào que torna GitHub Actions sistema mais flexível Configurando o projeto do Google App Engine Começamos acessando httpsconsole.cloud.google.com/appengine e criamos um novo projeto. Se você já tiver um, primeiro clique no nome do seu projeto na parte superior e, em seguida, clique em **NOVO PROJETO** Digite o nome do projeto, anote aqui o ID do projeto que você está obtendo (você precisará dele mais tarde) *âÃÂÃÂevie-landing-tutorialâÃÂÃÂ* âÃÂàe clique em **CREATE Em seguida, mude para este projeto no seletor de projetos na parte superior da página Clique em **Crie Aplicativo** e escolha a região desejada. Em seguida, para aplicativos estáticos, selecione Python e ambiente Standard (o nível gratuito se aplica apenas ao ambiente Standard). Neste ponto, seu aplicativo está pronto para as próximas etapas Para apontar seu nome de domínio para este aplicativo, navegue até httpsconsole.cloud.google.com/appengine/settings/domains e clique **Adicione um domínio personalizado Siga as instruções e aponte o DNS do seu domínio para os registros fornecidos pelo Google. Quando isso for feito, o Google apontará automaticamente seu domínio para este aplicativo e também gerenciará o certificado SSL Por fim, precisamos preparar a conta de serviço que seria responsável pelas implantações automáticas. Navegue até httpsconsole.cloud.google.com/iam-admin/serviceaccounts?project=your_project_id (substitua *your_project_id *neste link com o ID do seu projeto real, no meu caso seria *evie-landing-tutorial Você chegará à seguinte página de menu: Clique no ícone de 3 pontos na coluna Ações perto da conta de serviço padrão do App Engine. E selecione Opção **Criar chave** no menu suspenso Escolha JSON como seu tipo de chave e clique **CREATE Isso fará o download do arquivo .json para sua máquina. A última coisa que precisamos fazer aqui é codificar este arquivo no formato base64 âÃÂàprecisaremos disso mais tarde ao mover para o GitHub Actions Isso pode ser feito usando a linha de comando da seguinte forma: base64 your_json_file.json >key.base64 O arquivo key.base64 teria a chave codificada em base64 **Nota de segurança aqui, esses arquivos de chave json e base64 permitem controlar seu projeto GAE, portanto, depois de adicioná-los ao GitHub Actions (como mostrarei abaixo), é recomendável destruir exclua esses arquivos. Isso pode ser feito a partir do CLI da seguinte forma: destruir key_file_name&& rm key_file_name Uma vez obtida a chave, precisamos habilitar as APIs do Google App Engine âÃÂàpara isso visite a página httpsconsole.developers.google.com/apis/api/appengine .googleapis.com/overview e clique **HABILITAR** Configurando o repositório GitHub e as ações do GitHub Finalmente, é hora de preparar nosso repositório GitHub. Este tutorial aborda a configuração do tema Evie por Undraw. (Este é o tema que estou usando atualmente para a página inicial do Reliza Hub!) O tema Evie original está hospedado aqui, mas usarei o fork do Reliza neste repositório Como já mencionei em outros artigos, minha filosofia de construção atualmente é dockerizar tudo e usar docker build como um ambiente de compilação CI unificado em várias plataformas. Portanto, adicionei Dockerfile, configuração nginx e também atualizei as versões npm relativas ao tema Evie original para ter uma compilação dockerizada funcional Agora se fizermos docker build no conteúdo do repositório Evie da Reliza, ele criará uma imagem baseada em nginx servindo o tema Evie sem documentação na porta 80 Agora é hora de preparar o script GitHub Actions. Estaremos usando ações action-hub/gcloud@master que simplificam todo o processo Começamos definindo 2 segredos do GitHub Actions necessários para a ação. Navegue até Configurações ->Segredos dentro do seu repositório GitHub e clique **Novo segredo** para definir os seguintes 2 segredos: - GCLOUD_PROJECT_ID âÃÂàdefina-o para o ID do projeto anotado quando você estava criando seu projeto: evie-landing-tutorial no meu caso - GOOGLE_APPLICATION_CREDENTIALS âÃÂàdefina-o para o conteúdo do arquivo json-key codificado em base64 obtido para a conta de serviço do Google acima Agora, no repositório, crio o diretório .github e, em seguida, o diretório workflows dentro dele. E dentro dele eu crio o gae_build.yml. Também precisamos adicionar o arquivo app.yaml que contém a configuração do GAE e seria muito simples para o caso de uso do aplicativo estático que tenho Depois de enviar esse código, ele acionará a compilação do GitHub Actions, que fará uma implantação em seu aplicativo GAE e seus serviços serão ativados! Cada envio subsequente para o GitHub acionará automaticamente uma nova versão do GitHub Actions e atualizará automaticamente o aplicativo no GAE Agora você tem o pipeline CICD básico pronto para o seu site estático! Você pode parar aqui ou continuar lendo como adicionar a funcionalidade de visibilidade de aprovação e implantação usando o Reliza Hub BÔNUS: Adicionando aprovações e visibilidade usando o Reliza Hub Suponha que não queremos que cada nova compilação vá para a produção automaticamente. Em vez disso, queremos que eles sejam implantados primeiro em algum lugar que não seja de produção e, se gostarmos deles, você ou seu aprovador (digamos, seu gerente de marketing) precisa clicar em um botão e promover a produção Aqui está como isso pode ser alcançado com o Reliza Hub em cima da configuração que descrevi até agora 1 ââÂàMetadados de liberação de streaming para Reliza Hub Primeiro, navegue até httpsapp.relizahub.com, autentique com o GitHub e crie sua organização, no meu caso usarei *Tutorial Evie Landing* como nome da organização. Clique no item de menu **VCS** e depois no ícone de círculo de mais para adicionar um Repositório VCS Cole o URI do seu repositório GitHub na entrada e o Reliza Hub irá analisá-lo automaticamente Clique **Envie e isso criará seu repositório. Prossiga para o menu Projetos e clique no ícone de círculo de adição para criar um projeto. Digite o nome do seu projeto (vou usar *Evie Landing Set version schema to Single Component (Major) âÃÂàporque o GAE está usando seu próprio versionamento consistindo em um componente âà Âàque usaremos dentro do Reliza Hub como está. Escolha o repositório VCS para ser aquele que você acabou de criar na etapa anterior E clique **Enviar Isso criará um novo projeto. Em seguida, clique no nome do projeto recém-criado e clique no ícone de cadeado para gerar a chave de API do projeto Quando você vir a ID da API e a chave da API geradas para o seu projeto, crie 2 novos segredos nas ações do GitHub âÃÂàRELIZA_API_PROJECT_ID e RELIZA_API_PROJECT_KEY com os valores correspondentes Agora, é hora de atualizar nosso script gae_build.yml para transmitir os detalhes da compilação para o Reliza e também mudar para o modo sem promoção. Isso significa que, a cada git push, uma implantação será criada no GAE, mas o Google não mudará o tráfego para essa nova implantação até alguma etapa manual posterior O script atualizado inclui relatórios de rastreamento de tempo de construção para o Reliza Hub e também terá o URI de cada implantação não promovida no GAE. Você pode encontrar a descrição dos vários sinalizadores que usamos no repositório GitHub do Reliza Go Client Após a execução das ações do GitHub após a conclusão do push, você pode navegar até a página do seu lançamento no Reliza Hub e ver a seguinte imagem: Note que clicando no O link **Test endpoint** levará você à versão de implantação real no GAE correspondente a esta entrada de código-fonte âÃÂÃÂ, mas ainda não promovida para servir o tráfego Você também pode adicionar integração slack seguindo o guia aqui para receber notificações de cada novo lançamento no Reliza Hub 2 âÃÂàAdicionando Aprovações Vá para a página Configurações do Reliza Hub e na parte inferior dela configure sua matriz de aprovação para o ambiente de PRODUÇÃO. No meu caso, vou exigir apenas uma aprovação do MARKETING para que um lançamento seja promovido à produção. Como segue: Clique em **Salvar Matriz** Em seguida, instalo o aplicativo Reliza GitHub âÃÂàhttpsgithub.com/apps/reliza-hub âÃÂàe sigo o tutorial I¢Ã ÃÂescrevi anteriormente para registrá-lo para o projeto Por fim, um novo fluxo de trabalho do GitHub Actions que seria acionado nas aprovações do Reliza Hub âÃÂàvocê pode ver aqui. Essencialmente, esse fluxo de trabalho consulta o Reliza Hub para obter a versão aprovada para produção mais recente e, em seguida, solicita que o Google App Engine altere o tráfego para essa versão A única coisa que requer configuração neste script é a variável de ambiente RELIZA_PROJECT_ID âÃÂàque precisa ser definida para o UUID do projeto obtido na página do projeto no Reliza Hub: Agora, o lançamento do projeto mais recente com aprovação do MARKETING seria promovido automaticamente no lado do Google App EnginePara obter detalhes sobre como adicionar aprovadores à organização, assista ao meu vídeo tutorial sobre aprovações 3 ââÂàAdicionar visibilidade para o que é implantado quando Por fim, queremos adicionar visibilidade no Reliza Hub sobre qual versão é realmente implantada e quando Para fazer isso, primeiro vá para Instâncias no Reliza Hub e clique no ícone de círculo de adição para criar uma nova instância Em seguida, insiro o URI da minha instância e seleciono o ambiente como PRODUCTION âÃÂÃÂ, pois só tenho ambiente de produção neste site estático. clicando **Enviar** cria minha nova instância Em seguida, seleciono esta instância recém-criada e clico no ícone de cadeado para gerar sua chave de API Quando API ID e API Key são gerados, crie 2 novos segredos no GitHub Actions âÃÂàRELIZA_API_INSTANCE_ID e RELIZA_API_INSTANCE_KEY com valores correspondentes Com isso, primeiro atualizo meu script de implantação de aprovação para adicionar seção para verificar a implantação no GAE e transmiti-lo para o Reliza Hub. E também adiciono um fluxo de trabalho cron do GitHub Actions para verificar o estado do meu aplicativo GAE Depois que qualquer um desses fluxos de trabalho for executado, obteremos o instantâneo de implantação de nosso aplicativo GAE no Reliza Hub em nossa exibição de instância da seguinte forma: Resumo É isso, agora temos um pipeline CI CD completo com ações do GitHub implantadas no GAE e aprovações e visibilidade gerenciadas pelo Reliza Hub. Também podemos ter notificações do Slack e nosso gerente de marketing visualizando as alterações e pressionando botões para promovê-las à produção sem perguntar à equipe técnica. Quão legal é isso? Se você gostaria de falar comigo e discutir este ou outro fluxo de trabalho mais detalhadamente, agende uma demonstração sem compromisso de 30 minutos do Reliza Hub comigo. àe farei o possível para ajudar.