Skip to content

Latest commit

 

History

History

Lab. #1 - Deployment Automation

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Lab. #1 - Deployment Automation

⏱ Tempo de execução: ~65min.

Neste lab, você construirá uma esteira de desenvolvimento com o serviço OCI DevOps, que irá automatizar a entrega da aplicação MuShop, de forma conteinerizada, a um cluster Kubernetes na OCI!

Para aprofundar seu conhecimento neste serviço, acesse os links abaixo! 👇

Confira todo o passo-a-passo dessa implementação:


Pre Reqs: Coletar dados necessários e configurar policies

Vamos coletar alguns dados na tenancy da OCI que serão utilizados ao longo do laboratório. Recomendamos que os anote em um bloco de notas para ter sempre em mãos, de modo fácil. Serão coletados os seguintes dados:

Tenancy Namespace:
Auth Token:
Código da Região:

Tenancy Namespace

  1. Faça o login em sua conta na OCI.

  2. No menu do lado direto, no ícone do usuário, clique no nome da sua tenancy.

  1. Agora copie o namespace para o bloco de notas.

Username e Auth Token

  1. No menu do lado direito, clique no ícone do usuário, e então no nome do seu usuário.

  1. Copie o dado destacado em vermelho e o insira no seu bloco de notas. Este será o seu 'username'.

  1. Depois, desça a página até visualizar 'Resources', então clique em Auth Tokens e em Generate Token, para gerar um novo token.

  1. Insira uma descrição.

  1. Salve o auth token gerado no bloco de notas.

Código da Região

  1. Para a região US East (Ashburn): 'iad'.

  2. Para a região de Brazil East (Sao Paulo): 'gru'.

  3. Para as demais regiões, confira neste link.

  4. Copie o valor correspondente à sua região para o bloco de notas.

Criação de policies

Precisaremos criar dynamic groups e associar policies a estes, para que os recursos possam ter permissões para algumas execuções.

Para aprofundar seu conhecimento nestes serviços, acesse os links abaixo! 👇

  1. Na OCI, no menu de hambúrguer 🍔, acesse: Identity & SecurityIdentityCompartments.

  1. Busque pelo compartment onde irá provisionar os recursos e copie o seu OCID.

  1. Na OCI, no menu de hambúrguer 🍔, acesse: Identity & SecurityIdentityDynamic Groups.

  1. Então, clique em Create Dynamic Group.

  1. Atribua um nome e uma descrição ao dg, insira as seguintes regras e clique em Create. Lembre-se de substituir <seu-compartment-id>.

Para inserir uma regra adicional, clique em '+ Additional Rule'.

Rule 1: Any {instance.compartment.id = '<seu-compartment-id>'}
Rule 2: Any {resource.type = 'cluster', resource.compartment.id = '<seu-compartment-id>'}
Rule 3: Any{resource.type = 'devopsbuildpipeline', resource.compartment.id = '<seu-compartment-id>'}
Rule 4: Any{resource.type = 'devopsdeploypipeline', resource.compartment.id = '<seu-compartment-id>'}
Rule 5: Any {resource.type = 'devopsdeploypipeline', resource.compartment.id = '<seu-compartment-id>'}

  1. No menu do lado esquerdo, clique em Policies e em Create Policy.

  1. Escolha o compartment 'root, atribua um nome e descrição ao conjunto de policies, marque a opção 'Show manual editor', insira as seguintes policies e clique em Create.

Lembre-se de substituir <seu-dg> pelo nome do seu dynamic group.

Allow dynamic-group <seu-dg> to read metrics in tenancy
Allow dynamic-group <seu-dg> to read compartments in tenancy
Allow dynamic-group <seu-dg> to manage repos in tenancy
Allow dynamic-group <seu-dg> to manage devops-family in tenancy
Allow service vulnerability-scanning-service to read repos in tenancy
Allow service vulnerability-scanning-service to read compartments in tenancy
Allow dynamic-group <seu-dg> to use generic-artifacts in tenancy

É isso! Cumprimos todos os pré-requisitos para o laboratório! Vamos para os próximos passos!


Passo 1: Espelhar um repo no github para o projeto OCI DevOps

Passo 1.1: GitHub repo e Personal Access Token

  1. Crie um repo no github.

  1. Clique no ícone do seu perfil e em Settings.

  1. No menu do lado esquerdo, clique em Developer settings.

  1. Feito isto, clique em Personal access tokens e Generate new token.

  1. Insira uma nota descritiva e selecione o tempo de expiração que deseja. Para o escopo, selecione public_repo.

  1. Ao final da página, clique em Generate Token.

  1. Copie o token gerado.

Passo 1.2: Vault Secret

Nesse momento, vamos provisionar um OCI Vault para armazenar o token gerado no GitHub como um vault secret. O OCI Vault é um serviço da OCI que permite o gerenciamento seguro de credenciais e de outros dados sensíveis com chaves de criptografia.

Para aprofundar seu conhecimento neste serviço, acesse os links abaixo! 👇

  1. Na OCI, no menu de hambúrguer 🍔, acesse: Identity & SecurityVault.

  1. Clique em Create Vault.

  1. Atribua um nome ao seu vault e clique em Create Vault.

  1. Para criar uma Master Encryption Key, clique em Create Key.

  1. Selecione o 'Protection Mode' como Software, atribua um nome à chave e clique em Create Key.

  1. Feito isto, clique em Secrets e em Create Secret.

  1. Atribua um nome ao secret, selecione a Master Encryption Key criada anteriormente, insira o Personal Access Token em 'Secrets Contents' e clique em Create Secret.

Passo 1.3: Notifications Topic

Nessa etapa, vamos criar um tópico para que o projeto do OCI DevOps possa enviar notificações de eventos de execução dos pipelines. Para isso, utilizaremos o serviço OCI Notifications!

Para aprofundar seu conhecimento neste serviço, acesse os links abaixo! 👇

  1. Na OCI, no menu de hambúrguer 🍔, acesse: Developer ServicesApplication IntegrationNotifications.

  1. Então, clique em Create Topic.

  1. Atribua um nome ao tópico e clique em Create.

Passo 1.4: Criação do OCI DevOps Project

Nessa etapa, vamos então criar um projeto no OCI DevOps.

  1. Na OCI, no menu de hambúrguer 🍔, acesse: Developer ServicesDevOpsProjects.

  1. No compartment correspondente, clique em Create DevOps Project.

  1. Atribua um nome ao projeto, selecione o Notification Topic criado anteriormente e clique em Create DevOps Project.

  1. No projeto criado, clique em Enable Log.

  1. Clique no seletor, na coluna 'Enable log'.

  1. Mantenha as configurações como padrão e clique em Enable Log.

Passo 1.5: Criação de External Connection

Nessa etapa, vamos configurar propriamente a conexão do projeto do OCI DevOps ao repositório no GitHub.

  1. No menu do lado esquerdo, clique em External Connections.

  1. Clique em Create external connection.

  1. Atribua um nome à conexão, selecione o Vault e o Secret criados anteriormente, e clique em Create.

Passo 1.6: Repo Github espelhado

  1. Na página do projeto, clique em Code Repositories.

  1. Clique em Mirror repository.

  1. Selecione, em 'Connection', a conexão criada anteriormente, em 'Repository', o repo no GitHub, e então clique em Mirror Repository.

Com isso, concluímos o espelhamento do repo no GitHub para o projeto OCI DevOps! Podemos seguir agora com os próximos passos!


Passo 2: Criar pipeline de build e configurar criação da container image (CI)

  1. Retorne à página inicial do projeto OCI DevOps.

  2. Clique em Create build pipeline.

  1. Preencha o formulário da seguinte forma, e clique em Create:
    • Name: build
    • Description: (Defina uma descrição qualquer).

  1. Acesse a aba de Build Pipeline, e clique em Add Stage.

  1. Selecione a opção Managed Build e clique Next.

  1. Preencha o formulário da seguinte forma:
  • Stage Name: Criacao de container image
  • Description: (Defina uma descrição qualquer).
  • OCI build agent compute shape: Não alterar.
  • Base container image: Não alterar.
  • Build spec file path: Não alterar.

  1. Em Primary code repository, clique em Select.

  1. Selecione as opções abaixo e clique em Save.
  • Source Connection type: GitHub
  • Name: Selecione a conexão criada.
  • Select Repository: Selecione o repo do github.
  • Branch: main.
  • Build source name: storefront

  1. Feito isto, clique em Add.

🤔 Neste momento é importante entender a forma como a ferramenta trabalha 📝.

  • A ferramenta utiliza um documento no formato YAML para definir os passos que devem ser executados durante o processo de construção da aplicação.
  • Por padrão este documento é chamado de build_spec.yaml e deve ser configurado previamente de acordo com as necessidades da aplicação.
  • Os passos serão então executados por uma instância temporária (agent), que será provisionada no início de cada execução e destruída ao final do processo.
  • 🧾 Documentação de como formatar o documento de build
  • 📑 Documento utilizado neste workshop (build_spec.yaml)

Passo 3: Configurar entrega da container image (CI)

  1. Na aba de Build Pipeline, clique no sinal de "+", abaixo do stage Criacao de container image, e em Add Stage.

  1. Selecione a opção Deliver Artifacts e clique em Next.

  1. Preencha o formulário como abaixo e clique em Create Artifact.
  • Stage name: Entrega de Container Image
  • Description: (Defina uma descrição qualquer).

  1. Preencha o formulário como abaixo e clique em Add.
  • Name: mushop-demo
  • Type: Container image repository
  • Artifact Source: <código-de-região>.ocir.io/<tenancy-namespace>/mushop-demo:${BUILDRUN_HASH}
  • Replace parameters used in this artifact: Yes, substitute placeholders

  1. Finalmente, preencha como abaixo e clique em Add.
  • Build config/result artifact name: mushop-demo

Isso conclui a parte de Build (CI) do projeto! Até aqui automatizamos a compilação do código, configuramos a criação da container image e também o seu armazenamento no container registry! Vamos agora para a parte de Deployment (CD)!


Passo 4: Criar pipeline de deploy e configurar entrega da aplicação ao cluster Kubernetes (CD)

Passo 4.1: Criação do kubernetes secret

Nesse momento, iremos inicialmente criar o kubernetes secret, para permitir que o cluster colete a container image durante o deployment. Iremos criar o secret no namespace 'mushop'.

  1. No Cloud Shell, execute o seguinte comando:
kubectl create namespace mushop
  1. Copie o comando abaixo para o seu bloco de notas e o edite substituindo os campos destacados por '<>'.
kubectl create secret docker-registry ocisecret --docker-server=<código-da-região>.ocir.io --docker-username='<tenancy-namespace>/oracleidentitycloudservice/<e-mail>' --docker-password='<auth-token>' --docker-email='<e-mail>' -n mushop
  1. Então, no Cloud Shell, execute o comando anterior.

Passo 4.2: Adição de Environment no OCI DevOps

Vamos agora adicionar o cluster kubernetes como ambiente alvo no projeto OCI DevOps.

  1. Retorne ao seu projeto DevOps clicando no menu hambúrguer 🍔 e acessando: Developer ServicesDevOpsProjects.

  2. No canto esquerdo, selecione Environments.

  1. Clique em Create New Environment.

  2. Preencha o formulário como abaixo e clique em Next.

  • Environment type: Oracle Kubernetes Engine
  • Name: OKE
  • Description: OKE
  1. Selecione o cluster kubernetes, e clique em Create Envrinoment.

Passo 4.3: Criação de artefato de deployment

Nesse momento, vamos adicionar o arquivo deployment.yaml como artefato no OCI DevOps.

  1. Copie o deployment.yaml para um novo bloco de notas.

  2. Acesse o seu projeto DevOps clicando no menu hambúrguer 🍔 e acessando: Developer ServicesDevOpsProjects.

  3. No canto esquerdo selecione Artifacts em seguida em Add Artifact.

  1. Preencha o formulario como abaixo e clique em Add.
  • Name: deployment.yaml
  • Type: Kubernetes manifest
  • Artifact Source: Inline
  • Value: Cole o conteúdo do arquivo deployment.yaml
  • Replace parameters used in this artifact: Yes, substitute placeholders

Passo 4.4: Criação de pipeline de deployment

  1. No canto esquerdo, selecione Deployment Pipelines e, em seguida, clique em Create Pipeline.

  1. Preencha o formulário como abaixo e clique em Create pipeline.
  • Pipeline name: deploy
  • Description: (Defina uma descrição qualquer).

  1. Na aba de 'Pipeline', clique em Add Stage.

  1. Selecione a Opção Apply Manifest to your Kubernetes Cluster e clique em Next.

  1. Preencha o formulário da seguinte forma:
  • Name: Deployment da Aplicacao
  • Description: (Defina uma Descrição qualquer).
  • Environment: OKE

  1. Clique em Select Artifact, e selecione deployment.yaml.

  1. Feito isto, insira 'mushop' em Override Kubernetes namespace e clique em Add.

Com isso finalizamos a parte de Deployment (CD) do nosso projeto! No passo a seguir vamos conectar ambos os pipelines, e definir um trigger para que o processo automatizado se inicie!


Passo 5: Criação dos triggers de início e de conexão dos pipelines de CI e de CD

Passo 5.1: Criação do trigger de início do build pipeline

  1. Retorne ao projeto clicando no 🍔 menu hambúrguer e acessando: Developer ServicesDevOpsProjects.

  2. No canto esquerdo selecione Triggers, e em seguida clique em Create Trigger.

  1. Preencha o formulário como abaixo e clique em Add action.
  • Name: trigger-mushop
  • Description: (Defina uma descrição qualquer).
  • Source connection: GitHub

  1. Preencha o formulário como abaixo e clique em Save.
  • Select Build Pipeline: build
  • Event: Push (check)
  • Source branch: main

  1. Então, clique em Create.

  1. Copie o 'Trigger URL' e o 'Trigger Secret' para um bloco de notas, então clique em Close.

Nesse momento, vamos então configurar o envio da notificação de push do repo no github para o OCI DevOps.

  1. No GitHub, acesse o seu repo e clique em Settings.

  1. No lado esquerdo, clique em Webhooks e, então, em Add webhook.

  1. Preencha o formulário como abaixo e clique em Add webhook.
  • Payload URL: Copiado anteriormente
  • Content type: application/json
  • Secret: Copiado anteriormente

A partir desse momento, qualquer novo push feito no repositório do github iniciará o pipeline de build criado nesse workshop.

Passo 5.2: Criação do trigger de conexão entre os pipelines de build e deployment

  1. Retorne à configuração do pipeline de build do projeto selecionando Build Pipelinesbuild.

  1. Na aba de Build Pipeline, clique no sinal de "+" abaixo do stage Entrega de Imagem de Container e clique em Add Stage.

  1. Selecione o item de Trigger Deployment, e clique em Next.

  1. Preencha o formulário como abaixo e clique em Add.
  • Nome: Inicio de Deployment
  • Description: (Defina uma descrição qualquer).
  • Select deployment pipeline: deploy

Mantenha os demais campos sem alteração.

Parabéns por chegar até aqui!! Nosso pipeline já está pronto! No próximo passo iremos validar o projeto, checando se está tudo ok.

Passo 6: Validação da implementação

  1. Retorne ao projeto clicando no 🍔 menu hambúrguer e acessando: Developer ServicesDevOpsProjects.

  2. Obtenha o código da aplicação MuShop (storefront) e realize o push para o seu repo pessoal, no GitHub.

https://github.com/PortoLucas1/mushop
  1. No menu do lado esquerdo, selecione Build History.

  2. Após um curto intervalo, você deverá visualizar que o build pipeline foi iniciado.

  1. O pipeline será executado assim como configurado e ativará o deployment pipeline conectado.

  1. Finalizadas as execuções, no Cloud Shell, no canto superior direito, execute o comando abaixo:

kubectl get svc -n mushop --field-selector metadata.name=svc-mushop-demo
  1. Você deverá obter o seguinte:
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
svc-mushop-demo   LoadBalancer   10.96.204.188   <external-ip>   8080:30204/TCP   176m
  1. Cole o ip do campo 'EXTERNAL-IP' no seu browser, seguido da porta 8080:
http://<external-ip>:8080
  1. Você deverá visualizar a aplicação implementada (de forma customizada)!

👏🏻 Parabéns!!! Você foi capaz de construir com sucesso um pipeline completo de DevOps na OCI para a aplicação MuShop! 🚀

PS: Caso tenha encontrado algum erro ou inconsistência neste guia, não deixe de nos informar! :)