Este tutorial funciona com repositórios do GitHub públicos e particulares. As visualizações serão públicas, se estiverem ocultas.
Objetivos
- Criar um serviço do Cloud Run.
- Implemente a integração contínua baseada em controle de origem no GitHub.
- Criar e gerenciar o acesso a secrets por meio do Secret Manager.
- Implantar um Cloud Builder personalizado.
- Criar um gatilho do Cloud Build para invocar versões nas solicitações de envio do GitHub
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Criar contas de serviço (
roles/iam.serviceAccountCreator
) -
Administrador do Secret Manager (
roles/secretmanager.admin
)
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Como recuperar o exemplo de código
Para facilitar o uso neste tutorial, você criará um novo repositório do GitHub com uma cópia de um aplicativo Hello World com base em um modelo. Em seguida, você adicionará um novo arquivo a esse repositório com a configuração personalizada do Cloud Build.
- Faça login no GitHub e acesse o repositório de modelos.
- Crie um novo repositório usando este modelo clicando em "Usar este modelo".
- Nomeie seu repositório como
helloworld-python
. - Escolha "Público" ou "Privado" para o repositório.
- Clique em Criar repositório com base em modelo.
- Nomeie seu repositório como
Crie um novo arquivo de configuração do Cloud Build no seu repositório (instruções completas):
- Na página de seu repositório, clique em Adicionar arquivo > Criar novo arquivo
- Nomeie o novo arquivo como
cloudbuild.yaml
Copie o código abaixo para
cloudbuild.yaml
:Mantenha a opção padrão "Confirmar diretamente na ramificação
main
".Clique em Confirmar novo arquivo.
Como implantar o serviço com um gatilho de compilação
Neste tutorial, mostramos como configurar um gatilho de compilação para iniciar uma compilação automaticamente sempre que você atualizar a ramificação principal do repositório. Também é possível implantar o serviço manualmente invocando o Cloud Build toda vez que você quiser implantar uma alteração.
Neste tutorial, use o arquivo cloudbuild.yaml
para implantar um serviço de amostra chamado myservice
.
Conceda os papéis de administrador da conta de serviço e de administrador do Cloud Run à conta de serviço do Cloud Build (instruções completas):
No console do Google Cloud, acesse a página de configurações da conta do Cloud Build.
Ative o papel de administrador do Cloud Run.
Na caixa de diálogo de confirmação, clique em Conceder acesso a todas as contas de serviço.
Conecte sua conta do GitHub ao Cloud Build (instruções completas):
No console do Google Cloud, acesse a página de gatilhos do Cloud Build.
Clique em Conectar repositório.
Selecione GitHub (aplicativo do GitHub para Cloud Build) como origem e siga as caixas de diálogo de autenticação e autorização.
Selecione o repositório "GITHUB_USER_NAME/helloworld-python".
Clique em Conectar repositório.
Em "Criar um gatilho (opcional)", clique em Criar um gatilho.
Crie um gatilho do Cloud Build (instruções completas):
- Na página de gatilhos do Cloud Build, clique em Criar gatilho.
- Digite os seguintes detalhes:
- Nome:
prod-deploy
- Evento: enviar por push para a ramificação
- Repositório de origem: "GITHUB_USER_NAME/helloworld-python"
- Ramificação de origem:
^main$
- Configuração do build: arquivo de configuração do Cloud Build (yaml ou json)
- Local do arquivo de configuração do Cloud Build:
cloudbuild.yaml
- Nome:
- Clique em Criar.
Execute o novo gatilho manualmente:
- Na nova lista de acionadores, clique em Executar.
- No pop-up, confirme o nome da ramificação (
main
) e clique em Executar gatilho. - Verifique o progresso da compilação no Histórico do Cloud Build.
- Aguarde a conclusão da criação.
Confirme a implantação bem-sucedida.
No console do Google Cloud, acesse a página do Cloud Run.
Confirme se o serviço tem uma marca de seleção verde que mostra a implantação bem-sucedida.
Clique na guia Revisões e confirme se o serviço tem uma revisão, veiculando 100% do tráfego, começando com "myservice-00001-".
Clique na URL do serviço e confirme se ela exibe "Hello World!".
Como criar tokens e configurações
O gatilho prod-deploy criado na seção anterior implanta o serviço quando um push é feito para a ramificação principal. Agora você criará um segundo gatilho que será executado sempre que uma solicitação de envio for criada ou atualizada no seu repositório.
Depois que o novo gatilho for configurado, a visualização será implantada, mas não haverá informações na solicitação de envio para vincular à visualização. Para configurar essa funcionalidade, você precisa concluir as seguintes etapas de configuração adicionais:
- Criar um token do GitHub
- Armazenar esse token no Secret Manager
- Crie uma imagem personalizada para usar como uma etapa no Cloud Build.
Como criar e armazenar um token do GitHub
- Crie um token do GitHub para permitir a gravação novamente em uma solicitação de envio (instruções completas):
- Acesse a página de configurações do Token de acesso pessoal do GitHub.
- Clique em Gerar novo token.
- Digite os seguintes detalhes:
- Observação:
preview-deploy
- Expiração: 30 dias
- Escopo:
- Para um repositório público:
repo:status
("Status de confirmação de acesso") - Para um repositório particular:
repo
("Controle total de repositórios particulares")
- Para um repositório público:
- Observação:
- Clique em Gerar token.
- Copie o valor do token gerado.
Armazene o token do GitHub no Secret Manager:
No console do Google Cloud, acesse a página Secret Manager.
Clique em Criar secret.
Digite os seguintes detalhes:
- Nome:
github_token
. - Valor do secret: cole o valor do token que você copiou do GitHub.
- Nome:
Clique em Criar secret.
Permita o acesso do Cloud Build a este secret:
Em uma nova guia do navegador, no console do Google Cloud, acesse a página Configurações do Cloud Build.
Copie o valor para "E-mail da conta de serviço".
- O e-mail é
PROJECT_NUM@cloudbuild.gserviceaccount.com
- O e-mail é
Retorne ao Secret Manager, clique na guia Permissão e em
Adicionar.- Novas principais:
PROJECT_NUM@cloudbuild.gserviceaccount.com
- Papel: acessador de secrets do Secret Manager
- Novas principais:
Clique em Save.
O GitHub recomenda definir a validade dos tokens de acesso pessoal e enviará lembretes por e-mail quando eles estiverem definidos para expirar. Se você continuar usando visualizações de implantação, crie uma nova versão do github_token
ao gerar o token novamente. O builder na próxima etapa recupera a versão mais recente do token, para que as visualizações continuem funcionando.
Como criar uma nova imagem para o Cloud Build
O script que grava a notificação "Visualização da implantação" na solicitação de envio está localizado nas Amostras de documentos do Python. Em vez de adicionar esse script ao código-fonte, é possível criar esse script em um contêiner dentro do seu projeto e executar esse contêiner como uma etapa na configuração do Cloud Build.
Conclua as instruções a seguir usando o Cloud Shell ou a máquina local se tiver instalado e configurado o git
e a CLI do Google Cloud. As instruções abaixo mostram os dois métodos.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Configure a CLI do Google Cloud para usar seu projeto, substituindo
PROJECT_ID
pelo ID do projeto: Se você estiver usando o Cloud Shell, talvez seja necessário autorizar a CLI do Google Cloud para fazer uma chamada de API do Google Cloud. Clique em Autorizar para continuar a ação.export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID
- Crie uma nova imagem de contêiner:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples cd python-docs-samples/ gcloud builds submit --tag gcr.io/$PROJECT_ID/deployment-previews run/deployment-previews
- Confirme se o contêiner foi criado:
gcloud container images list
- Remova o repositório clonado:
cd .. rm -rf python-docs-samples
Como adicionar a nova configuração do Cloud Build
Seu repositório já tem um arquivo cloudbuild.yaml
usado na ramificação principal. Agora você criará uma nova configuração para esse novo gatilho.
Na página de repositório do GitHub, clique em Adicionar arquivo > Criar novo arquivo.
- Nomeie o novo arquivo como
cloudbuild-preview.yaml
- Copie o código abaixo e cole-o no novo arquivo:
- Nomeie o novo arquivo como
Confirme a alteração na ramificação principal do seu repositório.
Como criar o gatilho secundário
Agora que toda a base foi feita, crie o novo gatilho.
Crie um novo gatilho do Cloud Build (instruções completas):
No console do Google Cloud, acesse a página Gatilhos do Cloud Build.
Clique em Criar gatilho.
Digite os seguintes detalhes:
- Nome:
preview-deploy
- Evento: solicitação de envio
- Repositório de origem: "GITHUB_USER_NAME/helloworld-python"
- Ramificação de base:
^main$
- Controle de comentários: obrigatório, exceto para proprietários e colaboradores
- Como proprietário do repositório, as visualizações serão criadas automaticamente com base nas solicitações de envio que você criar.
- Se você quiser permitir que qualquer pessoa veja as alterações, leia as implicações de segurança da seleção de "Não obrigatório".
- Configuração: arquivo de configuração do Cloud Build
- Local do arquivo de configuração do Cloud Build:
cloudbuild-preview.yaml
- Nome:
Clique em Criar.
Verificação do sucesso
Como esse novo gatilho é disparado quando uma nova solicitação de envio é criada, você precisará criar uma nova para efetuar o teste.
- Acesse seu repositório e faça uma alteração visual para
app.py
em uma nova ramificação.- Acesse
app.py
e clique no ícone de lápis ( ). - Faça uma alteração. Por exemplo, mude "Olá" para "Saudações".
- Selecione Criar uma nova ramificação para essa confirmação e iniciar uma solicitação de envio e clique em Propor alteração.
- Acesse
Crie uma nova solicitação de envio com esta ramificação.
Se o gatilho estiver configurado corretamente, uma nova verificação será exibida logo depois que você criar a solicitação de envio:
O nome da verificação é o nome do gatilho e o ID do projeto. Para verificar o progresso da criação, clique em Detalhes > Ver mais detalhes no Google Cloud Build.
Se o acionador falhar e você precisar reenviar a compilação, ou se quiser fazer outra alteração na solicitação de envio, será necessário confirmar uma alteração na mesma ramificação. Cada nova confirmação em uma solicitação de envio acionará uma nova compilação.
Após a conclusão do acionador, uma nova verificação de status chamada Visualização da implantação é exibida para a solicitação de envio. O ícone exibido é o seu avatar porque a sua conta é proprietária do token usado:
Clique em Details para navegar até a visualização. O URL mostrado é o mesmo do original, mas tem o prefixo "pr-1---".
Se você navegar para a URL do serviço original, o conteúdo original será mostrado:
Veja a lista de revisões do serviço para verificar o estado dele no Cloud Run. Agora, há duas revisões que veiculam tráfego: a original e a visualização:
Continue fazendo alterações na solicitação de envio adicionando novas confirmações à ramificação. Sempre que você faz a confirmação, o gatilho
preview-deploy
é acionado, criando uma nova revisão do serviço e disponibilizando a revisão na mesma URL:Quando estiver pronto para mesclar suas alterações, clique em Mesclar solicitação de envio. O gatilho
prod-deploy
original é executado e as alterações da solicitação de envio são refletidas na URL original:A nova revisão veicula 100% do tráfego na URL principal, mas a URL de visualização da solicitação ainda estará anexada à confirmação mais recente dessa solicitação de envio para que o link continue funcionando:
Limitações
Há um limite no número de URLs de revisão que podem ser criadas. Se você espera que seu repositório tenha mais de 1.000 solicitações de envio, considere um processo para limpar as tags, como mostrado em cloudbuild-cleanup.yaml
.
Noções básicas sobre o código
cloudbuild.yaml
Este código é baseado no exemplo cloudbuild.yaml
fornecido pelo Cloud Build, mas com uma atualização anotada: a quarta etapa que executa update-traffic
.
As configurações em cloudbuild.yaml
fazem alterações na divisão de tráfego.
O parâmetro --to-latest
oferece a mesma funcionalidade que a caixa de seleção Veicular esta revisão imediatamente na página do Cloud Run. Ela garante que essa revisão do serviço exiba 100% do tráfego imediatamente.
cloudbuild-preview.yaml
Este código é semelhante a cloudbuild.yaml
, mas com etapas adicionais:
Depois de criar e enviar a imagem do serviço,
cloudbuild-preview.yaml
implanta o serviço usando a sinalização--no-traffic
. Isso significa que, mesmo que esta seja a revisão mais recente, ela não está sendo usada para exibir o tráfego.cloudbuild-preview.yaml
adiciona uma tag personalizada com base no número da solicitação de envio. Nesse caso, uma string prefixada com "pr-" e terminando no número da solicitação de envio.Nesse momento, a URL de revisão está funcionando, mas a pessoa que enviou a solicitação de envio não consegue determinar isso porque os registros do Cloud Build não estão visíveis no próprio GitHub: apenas um link aos registros está visível. Somente os usuários autenticados do projeto do Cloud Build com permissões suficientes podem ver os registros.
cloudbuild-preview.yaml
executa o scriptcheck_status.py
usando parâmetros de substituição integrados fornecidos pelo Cloud Build. Alguns desses parâmetros estão disponíveis ao trabalhar com repositórios do GitHub, como o número da solicitação de envio, o nome do repositório e o SHA de confirmação.
Para executar novamente este gatilho, envie outra confirmação no GitHub. Não é possível executar novamente este gatilho a partir da página do Cloud Build no console.
cloudbuild-cleanup.yaml
Esse código é uma alternativa ao cloudbuild.yaml
, com funcionalidade de limpeza. As etapas iniciais realizam a implantação, e a funcionalidade é estendida da seguinte maneira:
Usando a API de descoberta e as APIs do GitHub, determine quais tags para o serviço são para solicitações de envio fechadas. No mínimo, haverá uma solicitação de envio que foi mesclada, fazendo com que esse gatilho seja disparado.
Exclua as tags identificadas.
check_status.py
O script check_status.py
usa as informações fornecidas sobre o serviço do Cloud Run, sobre o repositório e a confirmação do GitHub e, em seguida, executa as seguintes operações:
- Recupere o nome, a tag e o URL de revisão do serviço usando o cliente Python da API do Google.
- Recupere o token do GitHub da variável de ambiente, fornecida pelo Secret Manager.
- Crie um status na confirmação determinada, criando um link para a URL de revisão recuperada, usando uma API do cliente GitHub para Python.
Limpeza
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial. Além disso, você precisará excluir as configurações do GitHub criadas para este tutorial.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir recursos do tutorial
Exclua o serviço do Cloud Run que você implantou neste tutorial:
- Navegue até o Console do Cloud Run.
- Selecione a listagem "myservice" e clique em Excluir.
- Na caixa de diálogo de confirmação, clique em Excluir.
Exclua outros recursos do Google Cloud criados neste tutorial:
- Exclua a imagem do contêiner da visualização de implantação denominada
gcr.io/PROJECT_ID/deployment-preview
do Container Registry. - Exclua a imagem de contêiner helloworld denominada
gcr.io/PROJECT_ID/helloworld
do Container Registry. - Exclua os gatilhos do Cloud Build.
- Exclua o secret do Secret Manager.
- Exclua a imagem do contêiner da visualização de implantação denominada
Como excluir configurações de tutorial
Para limpar as configurações do GitHub, remova o aplicativo Google Cloud Build do GitHub:
- Navegue até as configurações do aplicativo GitHub
- Na listagem do Google Cloud Build, clique em Configurar.
- Na seção Zona de perigo, clique em Desinstalar.
- Na caixa de diálogo de confirmação, clique em OK.
Você também precisará excluir o token do GitHub criado:
- Navegue até a página Tokens de acesso pessoal do GitHub.
- Na listagem preview-deploy, clique em Excluir.
- Na caixa de diálogo de confirmação, clique em Entendo, exclua este token.
Você também precisará excluir o repositório do GitHub:
- Navegue até o repositório do GitHub criado e clique na guia Configurações.
- Na seção Zona de perigo, clique em Excluir este repositório.
- Na caixa de diálogo de confirmação, insira o nome completo do repositório e clique em Entendo as consequências, exclua este repositório.
A seguir
- Saiba mais sobre reversões, lançamentos graduais e migração de tráfego no Cloud Run.
- Saiba mais sobre os gatilhos de aplicativos do GitHub no Cloud Build.