Observação:

Usar o Oracle Cloud Infrastructure DevOps para Automatizar Implantações do OCI Resource Manager

Introdução

O Oracle Cloud Infrastructure (OCI) Resource Manager é um serviço totalmente gerenciado que ajuda as equipes a gerenciar e automatizar sua Infraestrutura como Código (IaC). Ele permite que as equipes colaborem na configuração do Terraform, definam permissões em várias ações, forneça bloqueio de estado para evitar corrupção, armazene automaticamente todos os arquivos de estado em armazenamento persistente e cuida da configuração do provedor do Terraform. Para a entrega e implantação de todos os softwares, não apenas do Terraform, há o OCI DevOps, uma plataforma de integração/entrega contínua (CI/CD) de ponta a ponta para desenvolvedores com repositórios de código privados, acionadores, pipelines de build e implantação e muito mais.

O OCI Resource Manager incorporou automação para o Terraform e integrações com vários sistemas de controle de código-fonte para obter CI/CD básico. Neste tutorial, veremos como podemos usar o OCI DevOps para expandir esses recursos de CI/CD reimplantando automaticamente as pilhas do OCI Resource Manager em alterações de código do Terraform.

O Fluxo

Diagrama de fluxo

O processo começa com um usuário enviando uma nova configuração do Terraform para o repositório de código, que aciona os pipelines de build e implantação. Isso resulta na criação de um ambiente shell que usa a CLI (Interface de Linha de Comando) do OCI para aplicar a pilha do OCI Resource Manager com a nova configuração.

Objetivos

Tarefa 1: Configurar o Repositório de Código DevOps do OCI

  1. Faça log-in na Console do OCI, acesse Developer Services, DevOps, Projects e crie um projeto DevOps que conterá todos os recursos do workflow de CI/CD.

  2. Crie um Repositório de Código e faça upload da configuração do Terraform. Há muitos modelos fornecidos pela Oracle que você pode usar. Neste tutorial, o Terraform simplesmente altera a descrição de um tópico do OCI Notifications.

    resource "oci_ons_notification_topic" "test_notification_topic" {
        #Required
        compartment_id = <compartment_id>
        name = "RM_DevOps_Automation_Tutorial"
    
        #Optional
        description = "This is a test notification topic."
    }
    

    Configuração da Notificação Inicial

Tarefa 2: Criar um Artefato de Shell

Precisamos criar o artefato usado no pipeline de implantação primeiro. Como executaremos um script shell para executar a CLI do OCI, crie um artefato do tipo Especificação de comando. Neste tutorial, usaremos a origem de artefato para ser Em Linha com os seguintes comandos:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Criar artefato de shell

Para obter mais informações sobre a sintaxe e parâmetros adicionais, consulte a documentação de Especificação de Comando. Adicionaremos mais detalhes a este script posteriormente.

Tarefa 3: Criar um Pipeline de Implantação

Os pipelines de implantação são usados para implantar artefatos.

  1. Crie um pipeline de implantação e um estágio do tipo Shell.

    Criar estágio do shell

  2. Clique em Selecionar artefato e selecione o artefato criado na Tarefa 2. Selecione a Forma e a Configuração de rede que atendem aos seus requisitos.

    Selecionar artefato

    Observação: Políticas: Ao criar estágios, uma lista de políticas recomendadas será vinculada, certifique-se de adicioná-las. Além disso, nosso pipeline de implantação interagirá com o OCI Resource Manager e o OCI Notifications, portanto, certifique-se de conceder ao seu grupo dinâmico acesso a ons-topics, orm-stacks e orm-jobs. Para obter mais informações sobre uma lista completa de permissões para cada serviço, consulte Referência de Política.

Tarefa 4: Criar um Pipeline de Build

Mesmo que não construamos artefatos, ainda precisamos de um pipeline de build para acionar nosso pipeline de implantação.

  1. Crie um pipeline de build e um estágio do tipo Acionar implantação.

    Criar estágio de criação

  2. Clique em Selecionar pipeline de implantação e selecione o pipeline criado na Tarefa 3.

    Selecionar pipeline de implantação

Tarefa 5: Criar um Trigger

Precisamos criar um trigger que chame em envios de código.

  1. Navegue até Triggers e clique em Criar trigger.

  2. Na página Criar trigger, digite as seguintes informações.

    • Conexão de Origem: Digite o repositório de código do OCI.
    • Selecionar repositório de código: Selecione o repositório criado na Tarefa 1.
  3. Clique em Adicionar ação e especifique as informações a seguir.

    • Dipeline de build: Selecione o pipeline de build criado na Tarefa 4.
    • Evento: Selecione Push.
    • Condições de execução de build: Informe de acordo com seu caso de uso. Neste exemplo, usaremos as informações a seguir.
      • Ramificação de origem: Digite principal.
      • Arquivos a serem incluídos: Digite main.tf.

    Criar Trigger

Tarefa 6: Testar o Fluxo

Aqui está o fluxo de trabalho que acompanhamos até este ponto no tutorial.

  1. Envio de código.
  2. Acionador.
  3. Pipeline de build.
  4. Pipeline de implantação.
  5. O script shell executa echo "Running RM apply command".

Confirme o trabalho do fluxo de trabalho antes de adicionar mais complexidade ao script shell.

  1. Enviar novo código.

    Enviar código

  2. Confirme o pipeline de build acionado.

    Criação em andamento

  3. Confirme o pipeline de implantação acionado.

    Implantação em andamento

  4. Confirmar execução do script de shell com sucesso

    Sucesso no fluxo de teste

Tudo está funcionando como esperado. A última tarefa é remodelar nosso script shell para acionar a pilha do Resource Manager.

Tarefa 7: Modificar Script de Shell para Acionar a Pilha do Resource Manager

O runtime de imagem do contêiner do estágio do Shell inclui interpretadores de shell, utilitários de shell, CLIs e muito mais ferramentas. Para obter mais informações, consulte Detalhes de Runtime de Imagem do Contêiner do Shell.

Usaremos a CLI do OCI para chamar o Resource Manager. Nosso script shell atualmente tem esta aparência:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Para modificar o script shell, siga as etapas:

  1. Criar um job.

    A primeira chamada que faremos é create-apply-job. Isso cria um job de aplicação em nossa pilha do Resource Manager. Também salvaremos o job_id do job como uma variável para fazer referência ao job na próxima etapa.

    job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
    

    Para obter mais informações, consulte Referência de Comando da CLI do OCI: create-apply-job.

  2. Obter o status de job.

    Precisamos verificar se o job foi bem-sucedido ou falhou. Para fazer isso, passaremos o job_id para job get, que retorna as propriedades do job. Especificamente, nos preocupamos com o lifecycle-state.

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    Para obter mais informações, consulte Referência de Comando da CLI do OCI: obtenção de job.

  3. Analise o status do job.

    Adicione lógica para alterar o código de saída dependendo se o trabalho foi bem-sucedido (0) ou falhou (1).

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. Depois de agregar as etapas anteriores e adicionar algumas instruções de impressão adicionais, seu script de shell deverá ter a seguinte aparência:

    version: 0.1
    component: command
    timeoutInSeconds: 1200
    steps:
    - type: Command
      timeoutinSeconds: 900
      name: Invoke RMS
      command: |
        echo "Running RM apply command"
        job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
        echo "RMS plan job id is:"
        echo $job_id
        job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
        echo "Apply job lifecycle-state is:"
        echo $job_state
        if [ $job_state == SUCCEEDED ]; then
          echo "Resource Manager job succeeded"
          exit 0
        else
          echo "Resource Manager job failed"
          exit 1
        fi
    

Observação: Este é um exemplo simples que mostra a funcionalidade básica. Você pode personalizar o script de acordo com suas necessidades.

Tarefa 8: Teste de Ponta a Ponta

Sua arquitetura e fluxo completos devem ter esta aparência:

Diagrama de fluxo

Confirme o funcionamento da arquitetura.

  1. Enviar novo código.

    Enviar código

  2. Confirme se o script shell foi executado com sucesso.

    Sucesso da Shell

  3. Confirme se o Terraform foi aplicado com sucesso.

    tópico de notificação atualizado

Próximas Etapas

Este tutorial mostrou como automatizar as implementações de pilha do OCI Resource Manager com o OCI DevOps. Este é um exemplo simples que mostra o fluxo básico. Você é incentivado a pegar os conceitos aprendidos e desenvolvê-los, adaptá-los ao seu caso de uso e incorporá-los aos pipelines de CI/CD existentes.

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.