Implantação contínua do github para o Google Cloud Run usando o Build Triggers – Postagens – Sixtwothree.org
Recentemente, lancei o Indieweb-EndPoints.cc, um aplicativo Sinatra para descobrir os URLs específicos do Indieweb do site. O site demonstra os recursos do Indieweb-endpoints Ruby Gem e fornece um JSON API acessível a outros sites ou utilitários de linha de comando.
Por exemplo, os detalhes dos pontos de extremidade IndiewEB deste site estão disponíveis on -line ou através da linha de comando usando CURL:
curl --header 'Accept: application/json' 'https://indieweb-endpoints.cc/search?url=https://sixtwothree.org'
Eu implantei pontos de extremidade do IndiewEB para o recentemente lançado (na versão beta, de qualquer maneira …) Google Cloud Run “sem servidor” Plataforma de contêineres. Como parte do conjunto de produtos do Google Cloud de produtos do Google mais amplo e infinitamente complexo do Google, a Cloud Run implanta contêineres do Docker, permite atribuir nomes de domínio personalizados e provisões de renovação automática certificados TLS usando Let’s Encrypt. A Cloud Run não é apropriada para tudo, mas é uma escolha interessante para uma determinada categoria de Web Thang.
Enquanto este post é não O endosso do Google Cloud ou dos provedores de serviços baseados em nuvem concorrentes, ele detalha soluções para alguns problemas específicos que encontrei ao automatizar implantações de um repositório do GitHub para executar em nuvem.
Suposições
Eu quero apresentar algumas suposições antes de prosseguir:
- Este post é, antes de tudo, um despejo cerebral para mim, para que eu não esqueça como corrigir esses problemas na próxima vez que os encontrar.
- As instruções abaixo são precisas na data da publicação. O Google é notório por mudar rapidamente seus produtos, portanto não há garantia de que essas instruções funcionem no futuro. Inferno, o próprio site de documentação do Google não é totalmente preciso.
- Mais importante ainda, este post assume que você tem alguma familiaridade com o Google Cloud, Docker, Github etc. (consulte a suposição nº 1). O Cloud Run RickStarts pode ser útil se você ainda não configurou um aplicativo na plataforma.
- Vamos também supor que você tenha uma conta do Google Cloud com a Cloud Run ativada, criou um aplicativo do tamanho do docker cujo código-fonte está no GitHub e fez a configuração inicial no Cloud Run. Usarei o repositório indieweb-endpoints.cc github nos exemplos ao longo desta postagem.
Isso é muito, mas … sim. Tentando manter este post focado.
Crie um arquivo de configuração de construção em nuvem
Na raiz do seu projeto, crie um cloudbuild.yaml
Arquivo com conteúdo semelhante ao seguinte:
steps:
- name: "gcr.io/cloud-builders/docker"
args: ("build", "-t", "gcr.io/$PROJECT_ID/indieweb-endpoints-cc-web", ".")
- name: "gcr.io/cloud-builders/docker"
args: ("push", "gcr.io/$PROJECT_ID/indieweb-endpoints-cc-web")
- name: "gcr.io/cloud-builders/gcloud"
args: ("beta", "run", "deploy", "indieweb-endpoints-cc-web", "--image", "gcr.io/$PROJECT_ID/indieweb-endpoints-cc-web", "--platform", "managed", "--region", "us-central1")
images:
- "gcr.io/$PROJECT_ID/indieweb-endpoints-cc-web"
As etapas acima instrutam a nuvem Build para criar uma imagem de contêiner marcada do aplicativo, empurrá -lo ao registro de contêineres e implantar a imagem do contêiner na nuvem.
Algumas coisas que você ajusta:
- O nome do serviço (
indieweb-endpoints-cc-web
no snippet acima) está o nome do serviço em nuvem. - A plataforma deve ser
managed
ougke
. - A região deve ser uma das regiões de corrida em nuvem disponíveis (atualmente limitadas a
us-central1
).
Adicione, comprometa e empurre este novo arquivo ao repositório GitHub do seu aplicativo.
Crie uma filial implantável
Prefiro implantar em ambientes de produção de uma filial que não seja master
:
git checkout -b production
git push -u origin production
Crie um gatilho de construção
As compilações de automação do Google, usando o tutorial do Build Triggers, na verdade faz um bom trabalho ao cobrir esta etapa. Basicamente, crie um gatilho de construção usando o repositório Github do seu aplicativo (especificamente, o production
ramo) e o novo cloudbuild.yaml
arquivo.
Você deve então ser capaz de desencadear construções, empurrando novos compromissos para o production
ramificar ou usar manualmente o site do Google. Aqui é onde as coisas foram de lado para mim.
Atualizar permissões de conta de serviço de construção em nuvem
As etapas a seguir abordarão o primeiro erro que encontrei durante uma falha na implantação:
Erro: (gcloud.beta.run.deploy) permissão_denied: o chamador não possui permissão
- Faça login no console e navegue até a página do IAM.
- Clique no ícone “Editar” ao lado da conta de serviço de construção em nuvem do seu projeto (por exemplo, $project_number@cloudbuild.gserviceAccount.com).
- No painel “Editar permissões”, clique em “Adicionar outra função” e escolha “Cloud Run Admin.”
- Clique em “Salvar”.
Se você tentar novamente a implantação falhada anterior e tiver o mesmo problema que eu tive, precisará …
Atualizar acesso à conta do serviço Acesso ao usuário
O próximo erro que você encontra pode parecer:
Permissão ‘iam.serviceAccounts.actas’ negada na conta de serviço $project_number-compute@developer.gserviceAccount.com (ou pode não existir).
(Aqui e em outros lugares, $PROJECT_NUMBER
Apresenta a sequência exclusiva de caracteres específicos do seu projeto.)
Este levou uma eternidade para resolver, apesar de encarar atentamente as respostas não uma, mas duas pilhas. Vou reservar meus sentimentos muito fortes ™ sobre o provedor de serviços de plataforma em nuvem UX Design por outra hora…
- Faça login no console e navegue até a página Contas de Serviço.
- Clique na caixa de seleção ao lado de “$project_number-compute@gserviceaccount.com” e, se ainda não estiver visível, clique em “Mostrar painel de informações”.
- Clique em “Adicionar membro”.
- Digite “$project_number@cloudbuild.gserviceAccount.com” em novos membros e “selecione uma função”, escolha “Usuário da conta de serviço”.
- Clique em “Salvar”.
Represente a falha na implantação e…
Implantação contínua!
Agora você deve ser configurado para implantar continuamente um aplicativo de uma filial de produção no GitHub para o Google Cloud Run. Próximo passo? Descubra como postar notificações para relaxar.