Acesse mais de 700 laboratórios e cursos

Entrega contínua com o Jenkins no Kubernetes Engine

Laboratório 1 hora 15 minutos universal_currency_alt 5 créditos show_chart Intermediário
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Acesse mais de 700 laboratórios e cursos

GSP051

Logotipo dos laboratórios autoguiados do Google Cloud

Visão geral

Neste laboratório, você vai aprender a configurar um pipeline de entrega contínua usando o Jenkins no Kubernetes Engine. O Jenkins é o servidor de automação usado por desenvolvedores que integram com frequência o próprio código em um repositório compartilhado. A solução que você vai criar neste laboratório é semelhante ao diagrama abaixo:

Arquitetura do Jenkins e Kubernetes

No Centro de arquitetura do Cloud, consulte Jenkins no Kubernetes Engine para saber mais sobre como usar o Jenkins no Kubernetes.

O que você vai aprender

Neste laboratório, você vai realizar as seguintes tarefas para aprender a executar o Jenkins no Kubernetes:

  • Provisionar um aplicativo do Jenkins em um cluster do Kubernetes Engine
  • Configurar o aplicativo do Jenkins usando o Gerenciador de pacotes Helm
  • Conhecer os recursos de um aplicativo do Jenkins
  • Criar e testar um pipeline do Jenkins

Pré-requisitos

Este é um laboratório de nível avançado. Antes de começar, você precisa saber pelo menos os conceitos básicos de programação de shell, do Kubernetes e do Jenkins. Confira alguns laboratórios para você se preparar:

Quando estiver tudo pronto, role para baixo e saiba mais sobre o Kubernetes, o Jenkins e a entrega contínua.

O que é o Kubernetes Engine?

O Kubernetes Engine é a versão hospedada do Kubernetes do Google Cloud, um gerenciador de cluster e sistema de orquestração avançado para contêineres. O Kubernetes é um projeto de código aberto que pode ser executado em diversos ambientes: desde laptops e clusters de alta disponibilidade com vários nós, até máquinas virtuais e bare metal. Como mencionado acima, os apps do Kubernetes são desenvolvidos em contêineres. São aplicativos leves com todas as dependências e bibliotecas necessárias para executá-los. Essa estrutura subjacente torna os aplicativos Kubernetes altamente disponíveis, seguros e rápidos de implantar, o que é ideal para desenvolvedores de nuvem.

O que é o Jenkins?

O Jenkins é um servidor de automação de código aberto que permite orquestrar com flexibilidade pipelines de build, teste e implantação. Com o Jenkins, os desenvolvedores podem fazer iterações rápidas em projetos sem se preocupar com problemas de sobrecarga que podem ser gerados pela entrega contínua.

O que é a entrega/implantação contínua?

Quando é preciso configurar um pipeline de entrega contínua (CD), a implantação do Jenkins no Kubernetes Engine oferece benefícios importantes em comparação com uma implantação padrão baseada em VM.

Se você usar contêineres no processo de build, um host virtual poderá executar jobs em vários sistemas operacionais. O Kubernetes Engine oferece ephemeral build executors, que são usados somente quando os builds estão ativamente em execução, deixando recursos para outras tarefas do cluster, como jobs de processamento em lote. Outro benefício do uso de executores de build temporários é a velocidade, já que eles são iniciados em questão de segundos.

Além disso, o Kubernetes Engine vem com o balanceador de carga global do Google, que pode ser usado para automatizar o roteamento de tráfego da Web para suas instâncias. O balanceador de carga processa a terminação SSL e usa um endereço IP global configurado com a rede de backbone do Google. Com a interface da Web, esse balanceador de carga sempre leva seus usuários a uma instância do aplicativo pelo caminho mais rápido possível.

Agora que você aprendeu um pouco sobre o Kubernetes, o Jenkins e como os dois interagem em um pipeline de CD, é hora de criar um.

Configuração e requisitos

Antes de clicar no botão Começar o Laboratório

Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é ativado quando você clica em Iniciar laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.

Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, e não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.

Confira os requisitos para concluir o laboratório:

  • Acesso a um navegador de Internet padrão (recomendamos o Chrome).
Observação: para executar este laboratório, use o modo de navegação anônima (recomendado) ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e de estudante, o que poderia causar cobranças extras na sua conta pessoal.
  • Tempo para concluir o laboratório: não se esqueça que, depois de começar, não será possível pausar o laboratório.
Observação: use apenas a conta de estudante neste laboratório. Se usar outra conta do Google Cloud, você poderá receber cobranças nela.

Como iniciar seu laboratório e fazer login no console do Google Cloud

  1. Clique no botão Começar o laboratório. Se for preciso pagar por ele, uma caixa de diálogo vai aparecer para você selecionar a forma de pagamento. No painel Detalhes do Laboratório, à esquerda, você vai encontrar o seguinte:

    • O botão Abrir Console do Google Cloud
    • O tempo restante
    • As credenciais temporárias que você vai usar neste laboratório
    • Outras informações, se forem necessárias
  2. Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.

    O laboratório ativa os recursos e depois abre a página Fazer Login em outra guia.

    Dica: coloque as guias em janelas separadas lado a lado.

    Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
  3. Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.

    {{{user_0.username | "Username"}}}

    Você também encontra o nome de usuário no painel Detalhes do Laboratório.

  4. Clique em Próxima.

  5. Copie a Senha abaixo e cole na caixa de diálogo de Olá.

    {{{user_0.password | "Password"}}}

    Você também encontra a senha no painel Detalhes do Laboratório.

  6. Clique em Próxima.

    Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
  7. Acesse as próximas páginas:

    • Aceite os Termos e Condições.
    • Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
    • Não se inscreva em testes gratuitos.

Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.

Observação: para acessar os produtos e serviços do Google Cloud, clique no Menu de navegação ou digite o nome do serviço ou produto no campo Pesquisar. Ícone do menu de navegação e campo de pesquisa

Ativar o Cloud Shell

O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.

  1. Clique em Ativar o Cloud Shell Ícone "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.

  2. Clique nas seguintes janelas:

    • Continue na janela de informações do Cloud Shell.
    • Autorize o Cloud Shell a usar suas credenciais para fazer chamadas de APIs do Google Cloud.

Depois de se conectar, você verá que sua conta já está autenticada e que o projeto está configurado com seu Project_ID, . A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.

  1. (Opcional) É possível listar o nome da conta ativa usando este comando:
gcloud auth list
  1. Clique em Autorizar.

Saída:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (Opcional) É possível listar o ID do projeto usando este comando:
gcloud config list project

Saída:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Observação: consulte a documentação completa da gcloud no Google Cloud no guia de visão geral da gcloud CLI.

Tarefa 1: fazer o download do código-fonte

Nesta tarefa, você vai fazer o download do código-fonte deste laboratório.

  1. Para fazer a configuração, abra uma nova sessão no Cloud Shell e execute o comando abaixo para definir sua zona :
gcloud config set compute/zone {{{project_0.default_zone}}}
  1. Em seguida, copie o exemplo de código do laboratório:
gsutil cp gs://spls/gsp051/continuous-deployment-on-kubernetes.zip . unzip continuous-deployment-on-kubernetes.zip
  1. Agora, mude para o diretório correto:
cd continuous-deployment-on-kubernetes

Tarefa 2: provisionar o Jenkins

Crie um cluster do Kubernetes e permita que o Jenkins acesse o repositório do GitHub e o Google Container Registry.

Crie um cluster do Kubernetes

  1. Agora, execute o seguinte comando para provisionar um cluster do Kubernetes:
gcloud container clusters create jenkins-cd \ --num-nodes 2 \ --machine-type e2-standard-2 \ --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"

Essa etapa pode demorar alguns minutos. Os escopos extras permitem que o Jenkins acesse os repositórios do GitHub e o Google Container Registry.

Clique em Verificar meu progresso para conferir a tarefa realizada. Se o cluster do Kubernetes tiver sido criado corretamente, você vai receber uma pontuação de avaliação.

Criar um cluster do Kubernetes (zona: )
  1. Antes de continuar, execute o seguinte comando para confirmar se o cluster está ativo:
gcloud container clusters list

Credenciar o cluster

  1. Receba as credenciais do seu cluster.
gcloud container clusters get-credentials jenkins-cd
  1. O Kubernetes Engine usa essas credenciais para acessar seu cluster recém-provisionado. Confirme se você consegue se conectar a ele executando o seguinte comando:
kubectl cluster-info

Tarefa 3: configurar o Helm

O Helm é um gerenciador de pacotes que facilita a configuração e a implantação de aplicativos do Kubernetes. Depois de instalar o Jenkins, configure seu pipeline de CI/CD.

Nesta tarefa, você vai usar o Helm para instalar o Jenkins no repositório do Charts.

  1. Adicione o repositório de gráfico estável do Helm:
helm repo add jenkins https://charts.jenkins.io
  1. Use o comando a seguir para confirmar se o repositório está atualizado:
helm repo update

Tarefa 4: instalar e configurar o Jenkins

Ao instalar o Jenkins, é possível usar um arquivo values como modelo para fornecer os valores necessários para a configuração.

Use o arquivo values personalizado para configurar automaticamente o Kubernetes Cloud e adicionar estes plug-ins necessários:

  • Kubernetes:latest
  • Workflow-multibranch:latest
  • Git:latest
  • Configuration-as-code:latest
  • Google-oauth-plugin:latest
  • Google-source-plugin:latest
  • Google-storage-plugin:latest

Dessa forma o Jenkins se conecta ao cluster e ao projeto do Google Cloud.

  1. Use a CLI do Helm para implantar o gráfico com suas configurações:
helm install cd jenkins/jenkins -f jenkins/values.yaml --wait

O comando pode levar alguns minutos para concluir.

Clique em Verificar meu progresso para conferir a tarefa realizada. Se o gráfico do Jenkins tiver sido configurado corretamente, será exibida uma pontuação de avaliação.

Configurar e instalar o Jenkins
  1. Depois de executar o comando, verifique se o estado do pod do Jenkins está definido como Running e o do contêiner como "READY":
kubectl get pods

Exemplo de saída:

NAME READY STATUS RESTARTS AGE cd-jenkins-7c786475dd-vbhg4 2/2 Running 0 1m
  1. Configure a conta de serviço do Jenkins para fazer a implantação no cluster:
kubectl create clusterrolebinding jenkins-deploy --clusterrole=cluster-admin --serviceaccount=default:cd-jenkins

Você vai receber esta saída:

clusterrolebinding.rbac.authorization.k8s.io/jenkins-deploy created
  1. Execute o seguinte comando para configurar o encaminhamento de portas na interface do Jenkins no Cloud Shell:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
  1. Agora verifique se o serviço do Jenkins foi criado corretamente:
kubectl get svc

Exemplo de saída:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE cd-jenkins 10.35.249.67 8080/TCP 3h cd-jenkins-agent 10.35.248.1 50000/TCP 3h kubernetes 10.35.240.1 443/TCP 9h

Você está usando o plug-in do Kubernetes para iniciar automaticamente os nós do builder, conforme necessário, quando o mestre do Jenkins os solicitar. Ao final do processo, os nós do builder são automaticamente desativados, e os recursos são adicionados outra vez ao pool de recursos do cluster.

Esse serviço expõe as portas 8080 e 50000 dos pods que correspondem ao seletor. Com isso, a interface da Web do Jenkins e as portas de registro do builder/agente são expostas no cluster do Kubernetes. Além disso, o serviço jenkins-ui é exposto usando um ClusterIP para evitar o acesso a ele de fora do cluster.

Tarefa 5: conectar ao Jenkins

Recupere a senha de administrador e faça login na interface do Jenkins.

  1. O gráfico do Jenkins cria automaticamente uma senha de administrador para você. Para consultar a senha, execute este comando:
printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  1. Para acessar a interface do usuário do Jenkins, na barra de ação do Cloud Shell, clique em Visualização na Web (Ícone de visualização na Web) Visualizar na porta 8080:

  2. Se for necessário, faça login com o nome de usuário admin e sua senha gerada automaticamente.

A configuração do Jenkins no seu cluster do Kubernetes está pronta. O Jenkins vai gerenciar seus pipelines automatizados de CI/CD nas próximas seções.

Tarefa 6: entender o aplicativo

Nesta tarefa, você vai implantar o aplicativo de exemplo gceme no pipeline de implantação contínua. O aplicativo, escrito na linguagem Go, está no diretório sample-app do repositório. Quando você executa o binário gceme em uma instância do Compute Engine, o aplicativo exibe os metadados da instância em um card de informações.

O aplicativo simula um microsserviço aceitando dois modos de operação.

  • No modo de back-end: o gceme detecta a atividade da porta 8080 e retorna metadados da instância do Compute Engine no formato JSON.
  • No modo de front-end: o gceme consulta o serviço de back-end e renderiza o JSON resultante na interface do usuário.

Diagrama de arquitetura do gceme

Tarefa 7: implantar o aplicativo

Implante o aplicativo em dois ambientes diferentes:

  • Produção: é o site ativo que os usuários acessam.
  • Canário: é um site de capacidade menor que só recebe uma porcentagem do tráfego do usuário. Use esse ambiente para validar seu software com o tráfego ativo antes de lançá-lo para todos os usuários.
  1. No Google Cloud Shell, navegue para o diretório de aplicativos de amostra:
cd sample-app
  1. Crie o namespace do Kubernetes para isolar logicamente a implantação:
kubectl create ns production
  1. Use os comandos kubectl apply para criar as implantações das versões de produção e canário, além dos serviços:
kubectl apply -f k8s/production -n production kubectl apply -f k8s/canary -n production kubectl apply -f k8s/services -n production

Clique em Verificar meu progresso para conferir a tarefa realizada. Se as implantações tiverem sido criadas corretamente, vai aparecer uma pontuação de avaliação.

Criar as implantações de produção e canário

Por padrão, somente uma réplica do front-end é implantada. Use o comando kubectl scale para garantir o mínimo de quatro réplicas em execução o tempo todo.

  1. Escalone verticalmente os front-ends do ambiente de produção executando o seguinte comando:
kubectl scale deployment gceme-frontend-production -n production --replicas 4
  1. Agora, confirme que você tem cinco pods em execução para o front-end, quatro para o tráfego de produção e um para as versões canário. As mudanças na versão canário vão afetar somente um a cada cinco usuários (20%):
kubectl get pods -n production -l app=gceme -l role=frontend
  1. Além disso, confirme que você tem dois pods para o back-end, um para a produção e um para a versão canário:
kubectl get pods -n production -l app=gceme -l role=backend
  1. Consulte o IP externo dos serviços de produção:
kubectl get service gceme-frontend -n production Observação: o endereço IP externo do balanceador de carga talvez leve alguns minutos para aparecer.

Exemplo de saída:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gceme-frontend LoadBalancer 10.79.241.131 104.196.110.46 80/TCP 5h

Cole o IP externo no navegador para ver o card de informações. Você verá uma página semelhante a esta:

Back-end que atendeu a solicitação

  1. Agora, armazene o IP do balanceador de carga do serviço de front-end em uma variável de ambiente para usar mais tarde:
export FRONTEND_SERVICE_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend)
  1. Para confirmar que os dois serviços estão funcionando, abra o endereço IP externo do front-end no navegador.

  2. Verifique a saída da versão do serviço (que deve ser 1.0.0) executando o seguinte comando:

curl http://$FRONTEND_SERVICE_IP/version

Pronto, você implantou o aplicativo de amostra. Em seguida, configure um pipeline para implantar as alterações de maneira contínua e confiável.

Tarefa 8: criar o pipeline do Jenkins

Nesta tarefa, você vai criar o pipeline do Jenkins da seguinte maneira:

  • Crie um repositório para hospedar o código-fonte
  • Adicione credenciais para conceder acesso ao repositório de código ao Jenkins
  • Configure o Jenkins Cloud para o Kubernetes
  • Autentique o Jenkins com o repositório privado do GitHub
  • Crie o job do Jenkins

Crie um repositório para hospedar o código-fonte do app de amostra

  1. Crie uma cópia do app de amostra gceme e envie por push ao repositório do GitHub:

No Cloud Shell, execute os seguintes comandos para configurar o Git e o GitHub:

curl -sS https://webi.sh/gh | sh gh auth login gh api user -q ".login" GITHUB_USERNAME=$(gh api user -q ".login") git config --global user.name "${GITHUB_USERNAME}" git config --global user.email "${USER_EMAIL}" echo ${GITHUB_USERNAME} echo ${USER_EMAIL}
  • Pressione ENTER para aceitar as opções padrão.
  • Leia as instruções na resposta ao comando para fazer login no GitHub com um navegador da Web.

Quando você fizer login, seu nome de usuário do GitHub vai aparecer na saída no Cloud Shell.

gh repo create default --private

Ignore o aviso. Esse repositório não vai ser cobrado.

git init
  1. Inicialize o diretório sample-app como o próprio repositório Git:
git config credential.helper gcloud.sh
  1. Execute este comando:
git remote add origin https://github.com/${GITHUB_USERNAME}/default
  1. Adicione, confirme e envie os arquivos por push:
git add . git commit -m "Initial commit" git push origin master

Adicione as credenciais da sua conta de serviço

Configure as credenciais para permitir que o Jenkins acesse o repositório do código. O Jenkins usa as credenciais da conta de serviço do cluster para fazer o download do código do repositório do GitHub.

  1. Na interface do usuário do Jenkins, clique em Manage Jenkins (Gerenciar Jenkins) à esquerda e depois em Security > Credentials (Segurança > Credenciais).

  2. Clique em System.

Página de credenciais

  1. Clique em Global credentials (unrestricted) (Credenciais globais).

  2. Clique em Add Credentials (Adicionar credenciais) no canto superior direito.

  3. Selecione Google Service Account de metadados no menu suspenso Kind.

  4. No campo ID, insira o ID do projeto e clique em Create (Criar).

Observação: o ID do projeto está na seção "DETALHES DA CONEXÃO" do laboratório.

As credenciais globais foram adicionadas.

Página Global credentials (Credenciais globais) (unrestricted)

Configure o Jenkins Cloud para o Kubernetes

  1. Na interface do usuário do Jenkins, selecione Manage Jenkins > Nodes.
  2. Clique em Clouds no painel de navegação à esquerda.
  3. Clique em New cloud.
  4. Digite qualquer nome em Cloud name e selecione Kubernetes como Type.
  5. Clique em Create (Criar).
  6. No campo Jenkins URL, insira este valor: http://cd-jenkins:8080
  7. No campo Jenkins tunnel, insira este valor: cd-jenkins-agent:50000
  8. Clique em Save (Salvar).

Autentique o Jenkins com um repositório particular do GitHub usando uma chave SSH

Para autenticar o Jenkins com um repositório particular do GitHub usando uma chave SSH, siga as etapas abaixo:

a. Gerar a chave SSH

  1. Crie uma nova chave SSH do GitHub, em que github-email seja seu endereço de e-mail do GitHub:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C [your-github-email]
  1. Para fazer o download da chave privada (id_github) e da chave pública (id_github.pub) da sua máquina local, na barra de ações do Cloud Shell, clique em Mais (Ícone "Mais") e selecione a pasta continuous-deployment-on-kubernetes/sample-app.

b. Adicionar a chave pública ao GitHub

Depois de gerar a chave SSH, adicione a chave pública ao GitHub para que o Jenkins possa acessar seus repositórios.

  1. Acesse sua conta do GitHub. Clique no seu perfil do GitHub e acesse a opção Settings (Configurações).

  2. No menu lateral, selecione SSH and GPG keys (Chaves SSH e GPG).

  3. Clique em New SSH key (Nova chave SSH).

  4. Digite o título SSH_KEY_LAB.

  5. Cole o conteúdo da chave pública (id_github.pub) que foi baixado do caminho (~/continuous-deployment-on-kubernetes/sample-app/id_github.pub) no campo "Chave". Também é possível adicionar um nome descritivo no campo "Título".

  6. Clique em Add SSH key (Adicionar chave SSH).

c. Configurar o Jenkins para usar a chave SSH

  1. Acesse Jenkins e selecione Manage Jenkins no painel principal.

  2. Selecione a opção Credentials (Credenciais).

  3. Em Stores scoped to Jenkins, clique em System.

  4. Clique em Global credentials (unrestricted) (Credenciais globais).

  5. Clique em Add Credentials (Adicionar credenciais).

  6. No menu suspenso Kind, selecione SSH Username with private key (Nome de usuário SSH com chave privada).

  7. Para o ID, insira _ssh_key.

  8. Em Username (Nome de usuário), digite [seu nome de usuário do GitHub]

  9. Escolha Enter directly para a chave privada e clique em Add (Adicionar). Cole o conteúdo do arquivo id_github (baixado em ~/continuous-deployment-on-kubernetes/sample-app/id_github).

  10. Clique em Create (Criar).

d. Adicione a chave SSH pública aos hosts conhecidos

No Cloud Shell, crie um arquivo chamado known_hosts.github e adicione a chave SSH pública a ele.

ssh-keyscan -t rsa github.com > known_hosts.github chmod +x known_hosts.github cat known_hosts.github Observação: se você encontrar erros no Cloud Shell, pressione CTRL + C e execute o comando acima.

e. Configure a chave de host conhecida

  1. Clique em Painel > Manage Jenkins no painel à esquerda.

  2. Em Security (Segurança). Clique em Security.

  3. Em Git Host Key Verification Configuration para Host Key Verification Strategy, selecione Manually provided keys no menu suspenso.

  4. Cole o conteúdo do arquivo known hosts.github em Approved Host Keys.

  5. Clique em Save (Salvar).

Crie o job do Jenkins

Navegue até a interface do usuário do Jenkins e siga estas etapas para configurar um job de pipeline.

  1. Clique em Dashboard (Painel) > New Item (Novo item) no painel à esquerda.

  2. Nomeie o projeto como sample-app, escolha a opção Multibranch Pipeline (Pipeline de multirramificaçõs) e clique em OK.

  3. Na página seguinte, na seção Branch Sources (Origens da ramificação), selecione Git no menu suspenso Add Source (Adicionar origem).

  4. Cole o URL do clone HTTPS do repositório sample-app no campo Project Repository. Substitua ${GITHUB_USERNAME} pelo seu nome de usuário do GitHub:

git@github.com:${GITHUB_USERNAME}/default.git
  1. Nas opções do menu Credentials, selecione o nome github credentials.

  2. Na seção Scan Multibranch Pipeline Triggers, marque a caixa Periodically if not otherwise run e defina o valor de Interval como 1 minute.

  3. Deixe todas as outras opções como padrão e clique em Save (Salvar).

Depois que você concluir essas etapas, um job chamado Branch indexing será executado. Esse "meta-job" identifica as ramificações do repositório e garante que não ocorreram alterações nelas. Se você clicar em "sample-app" no canto superior esquerdo, o job master vai aparecer.

Observação: a primeira execução do job mestre pode falhar até que você faça algumas alterações no código na próxima etapa.

O pipeline do Jenkins está pronto. Em seguida, você vai criar o ambiente de desenvolvimento para integração contínua.

Tarefa 9: criar o ambiente de desenvolvimento

Uma ramificação de desenvolvimento é um conjunto de ambientes que os desenvolvedores usam para testar as alterações no código antes de enviá-las para integração ao site ativo. Esses ambientes são versões reduzidas do aplicativo, mas precisam ser implantados com os mesmos mecanismos do ambiente ativo.

Criar uma ramificação de desenvolvimento

Para criar um ambiente de desenvolvimento em uma ramificação de recursos, você pode enviá-lo por push ao servidor Git e deixar o Jenkins implantar o ambiente.

Observação: se você encontrar erros no Cloud Shell, pressione CTRL + C e execute o comando abaixo.
  • Crie um branch de desenvolvimento e envie-o por push ao servidor Git:
git checkout -b new-feature

Modificar a definição de pipeline

O Jenkinsfile que define o pipeline é escrito com a sintaxe do Groovy para pipelines do Jenkins (página em inglês). Com um Jenkinsfile, é possível expressar todo um pipeline de build em um único arquivo que coexiste com o código-fonte. Os pipelines aceitam recursos avançados, como o carregamento em paralelo, e exigem a aprovação manual do usuário.

Para que o pipeline funcione como esperado, é preciso modificar o Jenkinsfile para definir o ID do seu projeto.

  1. Abra o Jenkinsfile no seu editor de terminal, por exemplo, vi:
vi Jenkinsfile
  1. Inicie o editor:
i
  1. Adicione o PROJECT_ID ao valor REPLACE_WITH_YOUR_PROJECT_ID. O PROJECT_ID é o ID do seu projeto que fica na seção CONNECTION DETAILS (Detalhes da conexão) do laboratório. Ele também pode ser localizado usando gcloud config get-value project.

  2. Altere o valor da CLUSTER_ZONE para . É possível conseguir esse valor usando gcloud config get compute/zone.

PROJECT = "REPLACE_WITH_YOUR_PROJECT_ID" APP_NAME = "gceme" FE_SVC_NAME = "${APP_NAME}-frontend" CLUSTER = "jenkins-cd" CLUSTER_ZONE = "{{{project_0.default_zone}}}" IMAGE_TAG = "gcr.io/${PROJECT}/${APP_NAME}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}" JENKINS_CRED = "${PROJECT}"
  1. Salve o arquivo Jenkinsfile, pressione a tecla Esc (para usuários do vi) e use:
:wq

Modificar o site

Para demonstrar como alterar o aplicativo, mude a cor dos cards do gceme de azul para laranja.

  1. Abra o html.go:
vi html.go
  1. Inicie o editor:
i
  1. Mude as duas instâncias de <div class="card blue"> com o seguinte código:
<div class="card orange">
  1. Salve o arquivo html.go, pressione a tecla Esc e use:
:wq
  1. Abra o main.go:
vi main.go
  1. Inicie o editor:
i
  1. A versão é definida nesta linha:
const version string = "1.0.0"

Atualize a versão para:

const version string = "2.0.0"
  1. Salve o arquivo main.go novamente, pressione a tecla Esc e use:
:wq

Tarefa 10: iniciar implantação

Nesta tarefa, você implanta o ambiente de desenvolvimento.

  1. Confirme e envie suas alterações por push:
git add Jenkinsfile html.go main.go git commit -m "Version 2.0.0" git push origin new-feature

Isso inicia uma criação do seu ambiente de desenvolvimento.

Depois de enviar a mudança por push ao repositório do Git, acesse a interface de usuário do Jenkins. Você verá que a criação da ramificação new-feature foi iniciada. Pode levar até um minuto para que as alterações sejam detectadas.

  1. Depois que o build estiver em execução, clique na seta para baixo ao lado do build na navegação à esquerda e selecione Saída do console:

Painel de navegação

  1. Acompanhe a saída do build por alguns minutos e aguarde o início das mensagens kubectl --namespace=new-feature apply.... A ramificação "new-feature" foi implantada no cluster.
Observação: em um cenário de desenvolvimento, você não usaria um balanceador de carga voltado para o público. Para proteger o aplicativo, você pode usar o proxy kubectl. O proxy faz a própria autenticação com a API Kubernetes e retransmite as solicitações da máquina local para o serviço no cluster sem expor seu serviço à Internet.

Se nada aparecer em Build Executor, não se preocupe. Acesse a página inicial do Jenkins > app de amostra. Verifique se o pipeline new-feature foi criado.

  1. Assim que tudo estiver pronto, inicie o proxy em segundo plano:
kubectl proxy &
  1. Se o processo parar, pressione as teclas CTRL + C para sair. Verifique se é possível acessar o aplicativo enviando uma solicitação para localhost e permitindo que o proxy kubectl o encaminhe para seu serviço:
curl \ http://localhost:8001/api/v1/namespaces/new-feature/services/gceme-frontend:80/proxy/version

Você verá a resposta "2.0.0", que é a versão em uso no momento.

Se você receber um erro semelhante a este:

{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "no endpoints available for service \"gceme-frontend:80\"", "reason": "ServiceUnavailable", "code": 503
  1. Isso significa que o endpoint do front-end ainda não foi propagado. Aguarde um pouco e tente o comando curl novamente. Prossiga quando receber a seguinte saída:
2.0.0

Pronto, você configurou o ambiente de desenvolvimento. Agora, use o que aprendeu no módulo anterior para implantar uma versão canário e testar um novo recurso.

Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver iniciado o build para a ramificação "new-feature", você vai receber uma pontuação de avaliação.

Build para a ramificação new-feature

Tarefa 11: implantar uma versão canário

Você confirmou que seu app está executando o código mais recente no ambiente de desenvolvimento. Agora, implante esse código no ambiente canário.

  1. Crie uma ramificação canário e a envie por push para o servidor do Git:
git checkout -b canary git push origin canary
  1. No Jenkins, você vai notar que o pipeline canário foi iniciado. Depois de concluído, verifique o URL de serviço para garantir que parte do tráfego seja atendida pela nova versão. O esperado é que uma em cada cinco solicitações, sem ordem específica, retorne a versão 2.0.0:
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. Se você continuar vendo a versão 1.0.0, execute os comandos acima novamente. Depois de confirmar que está tudo certo, encerre o comando com CTRL + C.

Pronto! Você implantou uma versão canário. Em seguida, implante a nova versão na produção.

Clique em Verificar meu progresso para conferir a tarefa realizada. Se a implantação da versão canário tiver sido concluída, você vai receber uma pontuação de avaliação.

Implantar uma versão canário

Tarefa 12: implantar para a produção

Agora que a versão canário está pronta e não houve reclamações de clientes, implante-a no restante da sua frota de produção.

  1. Crie uma ramificação canário e a envie por push para o servidor do Git:
git checkout master git merge canary git push origin master

No Jenkins, você verá que o pipeline mestre foi iniciado.

Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver iniciado o pipeline mestre, vai aparecer uma pontuação de avaliação.

Como implantar a versão na produção
  1. Após a conclusão, que pode levar alguns minutos, verifique o URL do serviço para garantir que todo o tráfego está sendo atendido pela nova versão 2.0.0.
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. Mais uma vez, se instâncias da versão 1.0.0 forem retornadas, execute os comandos acima novamente. Para interromper esse comando, pressione CTRL + C.

Exemplo de saída:

gcpstaging9854_student@qwiklabs-gcp-df93aba9e6ea114a:~/continuous-deployment-on-kubernetes/sample-app$ while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 ^C

Você também pode navegar para o site em que o aplicativo gceme mostra os cards de informações. A cor do card mudou de azul para laranja.

  1. Confira abaixo o comando que foi usado para consultar o endereço IP externo. Cole o IP externo em uma nova guia para que o card de informação apareça:
kubectl get service gceme-frontend -n production

Exemplo de saída:

Página do back-end que atendeu a solicitação

Tarefa 13: testar os conhecimentos

Responda às perguntas de múltipla escolha a seguir para reforçar sua compreensão dos conceitos abordados neste laboratório. Use todo o conhecimento adquirido até aqui.

Pronto.

Muito bem! Você implantou seu aplicativo na produção.

Parabéns!

Isso conclui este laboratório prático sobre implantação e uso do Jenkins no Kubernetes Engine para ativar o pipeline de entrega/implantação contínua. Você teve a oportunidade de implantar uma ferramenta DevOps importante no Kubernetes Engine e configurá-la para uso na produção. Você trabalhou com a ferramenta de linha de comando kubectl e as configurações de implantação em arquivos YAML, além de aprender um pouco sobre a configuração de pipelines do Jenkins para um processo de desenvolvimento/implantação. Com essa experiência prática, você deve se sentir mais à vontade para usar essas ferramentas no seu próprio trabalho de DevOps.

Próximas etapas / Saiba mais

Treinamento e certificação do Google Cloud

Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.

Manual atualizado em 10 de junho de 2025

Laboratório testado em 10 de junho de 2025

Copyright 2025 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.