Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
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
- Reimplante automaticamente uma pilha do OCI Resource Manager após alterações no Terraform.
Tarefa 1: Configurar o Repositório de Código DevOps do OCI
-
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.
-
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." }
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"
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.
-
Crie um pipeline de implantação e um estágio do tipo Shell.
-
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.
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
eorm-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.
-
Crie um pipeline de build e um estágio do tipo Acionar implantação.
-
Clique em Selecionar pipeline de implantação e selecione o pipeline criado na Tarefa 3.
Tarefa 5: Criar um Trigger
Precisamos criar um trigger que chame em envios de código.
-
Navegue até Triggers e clique em Criar trigger.
-
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.
-
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.
Tarefa 6: Testar o Fluxo
Aqui está o fluxo de trabalho que acompanhamos até este ponto no tutorial.
- Envio de código.
- Acionador.
- Pipeline de build.
- Pipeline de implantação.
- O script shell executa
echo "Running RM apply command"
.
Confirme o trabalho do fluxo de trabalho antes de adicionar mais complexidade ao script shell.
-
Enviar novo código.
-
Confirme o pipeline de build acionado.
-
Confirme o pipeline de implantação acionado.
-
Confirmar execução do script de shell com sucesso
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:
-
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 ojob_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.
-
Obter o status de job.
Precisamos verificar se o job foi bem-sucedido ou falhou. Para fazer isso, passaremos o
job_id
parajob get
, que retorna as propriedades do job. Especificamente, nos preocupamos com olifecycle-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.
-
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
-
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:
Confirme o funcionamento da arquitetura.
-
Enviar novo código.
-
Confirme se o script shell foi executado com sucesso.
-
Confirme se o Terraform foi aplicado com sucesso.
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.
Links Relacionados
Confirmações
- Autors - Cody Brinkman (Arquiteto de Nuvem), Qian Chen (Membro da Equipe Técnica, Ferramentas e Serviços do Desenvolvedor OCI) e Nandan Kandregula (Gerente de Desenvolvimento de Software, Ferramentas e Serviços do Desenvolvedor OCI)
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.
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16604-01
October 2024