arrow_back

Entrega contínua com o Jenkins no Kubernetes Engine

Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Entrega contínua com o Jenkins no Kubernetes Engine

Lab 1 hora 15 minutos universal_currency_alt 5 créditos show_chart Intermediário
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP051

Laboratórios autoguiados do Google Cloud

Visão geral

Neste laboratório, você 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ê criará neste laboratório será 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ê aprenderá

Neste laboratório, você completará as seguintes tarefas para saber como usar o Jenkins no Kubernetes:

  • Provisionar um aplicativo do Jenkins em um cluster do Kubernetes Engine
  • Configurar seu 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 containers. 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 criação, 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 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 levará 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 Start Lab

Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o 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, 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 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.
  • Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Observação: não use seu projeto ou conta do Google Cloud neste laboratório para evitar cobranças extras na sua conta.

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, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você verá o seguinte:

    • O botão Abrir Console do Cloud
    • Tempo restante
    • As credenciais temporárias que você vai usar neste laboratório
    • Outras informações se forem necessárias
  2. Clique em Abrir Console do Google. O laboratório ativa recursos e depois abre outra guia com a página Fazer login.

    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. Caso seja preciso, copie o Nome de usuário no painel Detalhes do laboratório e cole esse nome na caixa de diálogo Fazer login. Clique em Avançar.

  4. Copie a Senha no painel Detalhes do laboratório e a cole na caixa de diálogo Olá. Clique em Avançar.

    Importante: você precisa usar as credenciais do painel à esquerda. Não use suas credenciais do Google Cloud Ensina. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
  5. 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 GCP vai ser aberto nesta guia.

Observação: para ver uma lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo. Ícone do menu de navegação

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.

Depois de se conectar, vai notar 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 YOUR_PROJECT_ID

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.

  2. A saída será parecida com esta:

Saída:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net 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_ID>

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: para conferir a documentação completa da gcloud, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.

Tarefa 1: faça o download do código-fonte

  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: faça o provisionamento do Jenkins

Como criar um cluster do Kubernetes

  1. Agora, execute este 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 levar vários minutos para ser concluída. Os escopos extras permitem que o Jenkins acesse o Cloud Source Repositories e o Google Container Registry.

Teste a tarefa concluída

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

Crie um cluster do Kubernetes (zona: )
  1. Antes de continuar, execute o seguinte comando para confirmar se o cluster está ativo:
gcloud container clusters list
  1. Consulte as credenciais do 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: configure o Helm

Neste laboratório, você vai usar o Helm para instalar o Jenkins a partir do repositório Charts. O Helm é um gerenciador de pacotes que facilita a configuração e a implantação de aplicativos do Kubernetes. Depois de instalar o Jenkins, você poderá configurar seu pipeline de CI/CD.

  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: configure e instale o Jenkins

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

Você vai usar 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 GCP.

  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

Talvez leve alguns minutos para que o comando seja concluído.

Teste a tarefa concluída

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

Configure e instale 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 para a interface do Jenkins usando o 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 que os nós do builder sejam iniciados automaticamente, conforme necessário, quando o mestre do Jenkins os solicitar. Após a conclusão do processo, eles serão automaticamente desativados, e os recursos relacionados serão adicionados outra vez ao pool de recursos do cluster.

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

Tarefa 5: conecte-se ao Jenkins

  1. O gráfico do Jenkins vai criar automaticamente uma senha de administrador para você. Para ver essa senha, execute o seguinte:
printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  1. No Cloud Shell, clique no botão Visualização na Web e depois em Visualizar na porta 8080 para acessar a interface do usuário do Jenkins:

Opção Visualizar na porta 8080

  1. 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: entenda o aplicativo

Você vai implantar o aplicativo de amostra 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 app mostra os metadados da instância em um card de informações.

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

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: implante o aplicativo

Você vai implantar 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 até 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

Teste a tarefa concluída

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

Crie 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. Agora, configure um pipeline para implantar as alterações de maneira contínua e confiável.

Tarefa 8: crie um pipeline do Jenkins

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

  1. Crie uma cópia do app de amostra gceme e a envie por push ao Cloud Source Repository:
gcloud source repos create default

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

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir a tarefa realizada. Se o repositório de origem tiver sido criado corretamente, você verá uma pontuação de avaliação.

Crie um repositório 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://source.developers.google.com/p/$DEVSHELL_PROJECT_ID/r/default
  1. Defina o nome de usuário e o endereço de e-mail para as confirmações do Git. Substitua [EMAIL_ADDRESS] pelo endereço de e-mail do Git e [USERNAME] pelo nome de usuário do Git:
git config --global user.email "[EMAIL_ADDRESS]" git config --global user.name "[USERNAME]"
  1. Adicione, confirme e envie os arquivos por push:
git add . git commit -m "Initial commit" git push origin master

Como adicionar as credenciais da conta de serviço

Configure as credenciais para permitir que o Jenkins acesse o repositório do código. O Jenkins vai usar as credenciais da conta de serviço do seu cluster para fazer o download do código do Cloud Source Repositories.

  1. Na interface do usuário do Jenkins, clique em Manage Jenkins à esquerda e depois em Security > Credentials.

  2. Clique em System.

Página de credenciais

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

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

  3. Selecione Google Service Account from metadata no menu suspenso Kind e clique em Create.

As credenciais globais foram adicionadas. O nome da credencial é o Project ID que está na seção CONNECTION DETAILS do laboratório.

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

Como configurar 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.
  6. Selecione Kubernetes Cloud Details.
  7. No campo Jenkins URL, insira este valor: http://cd-jenkins:8080
  8. No campo Jenkins tunnel, insira este valor: cd-jenkins-agent:50000
  9. Clique em Save (Salvar).

Como criar 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 Cloud Source Repositories, no campo Project Repository (Repositório de projetos). Substitua [PROJECT_ID] pelo ID do projeto:

https://source.developers.google.com/p/[PROJECT_ID]/r/default
  1. No menu suspenso Credentials (Credenciais), selecione a credencial que você criou ao adicionar sua conta de serviço nas etapas anteriores.

  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. A configuração do job será semelhante a esta:

Seção Branch Sources (Origens da ramificação)

  1. Clique em Save (Salvar) e mantenha o valor padrão das outras opções.

Depois que você concluir essas etapas, um job chamado Branch indexing (Indexação de ramificação) 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: crie 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.

Crie 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.

  • Crie uma ramificação de desenvolvimento e a envie por push ao servidor Git:
git checkout -b new-feature

Como modificar a definição do 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 oferecem suporte aos recursos eficientes, 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 código 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

Modifique 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: inicie a implantação

  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 vai iniciar a 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.... Agora, a ramificação "new-feature" vai ser implantada no seu 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 for exibido em Build Executor (Executor de build), 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 o aplicativo pode ser acessado enviando uma solicitação para localhost e permitindo que o proxy kubectl a 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, você usará o que aprendeu no módulo anterior para implantar uma versão canário e testar um novo recurso.

Tarefa 11: implante 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 ver 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. Agora, implante a nova versão na produção.

Tarefa 12: implante a versão na 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.

  1. Depois de concluído, o que pode levar alguns minutos, verifique o URL de 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: teste seu conhecimento

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.

Termine a Quest

Este laboratório autoguiado faz parte das Quests Kubernetes no Google Cloud, Cloud Architecture e DevOps Essentials. Uma Quest é uma série de laboratórios relacionados que formam um programa de aprendizado. Ao concluir uma Quest, você ganha um selo como reconhecimento da sua conquista. É possível publicar os selos e incluir um link para eles no seu currículo on-line ou nas redes sociais. Inscreva-se em qualquer Quest que tenha este laboratório para receber os créditos de conclusão na mesma hora. Confira o catálogo do Google Cloud Ensina para ver todas as Quests disponíveis.

Comece o próximo laboratório

Continue sua Quest no Hello Node Kubernetes ou confira estes laboratórios do Google Cloud Ensina:

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 20 de setembro de 2023

Laboratório testado em 20 de setembro de 2023

Copyright 2024 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.