Implantar um fluxo de trabalho de um repositório Git usando o Cloud Build

É possível usar um acionador do Cloud Build para iniciar automaticamente um build e implantar um fluxo de trabalho em um repositório Git. É possível configurar o gatilho para implantar seu fluxo de trabalho em qualquer alteração do repositório de origem ou implantar o no fluxo de trabalho somente quando a alteração corresponder a critérios específicos.

Essa abordagem pode ajudar a gerenciar o ciclo de vida da implantação. Por exemplo, você pode implantar mudanças em um fluxo de trabalho em um ambiente de preparo, executar testes nesse ambiente e, em seguida, lançar essas mudanças de forma incremental no ambiente de produção.

Antes de começar

Estas instruções presumem que você tem Papel Editor do Cloud Build (roles/cloudbuild.builds.editor) no projeto do Google Cloud podem criar gatilhos. Você também precisa de um fluxo de trabalho em um repositório de origem, como o GitHub ou o Bitbucket.

Console

  1. Ative as APIs Cloud Build e Workflows.

    Ative as APIs

  2. Conceda a função de administrador de fluxos de trabalho (roles/workflows.admin) à conta de serviço do Cloud Build:

    1. No console do Google Cloud, abra a página IAM.

      Acessar IAM

    2. Selecione o projeto.

    3. Na linha da conta de serviço do Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com), clique em Editar principal.

    4. Clique em Adicionar outro papel.

    5. Na lista Papel, selecione Administrador de fluxos de trabalho.

    6. Clique em Salvar.

  3. Conceda o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço padrão do Compute Engine à conta de serviço do Cloud Build. Quando você ativa a API Compute Engine, a conta de serviço padrão do Compute Engine é PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    1. No Console do Google Cloud, acesse a página Contas de serviço.

      Acessar a página "Contas de serviço"

    2. Selecione o projeto.

    3. Clique no endereço de e-mail da conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    4. Clique na guia Permissões.

    5. Clique no botão Permitir acesso.

    6. Para adicionar um novo principal, insira o endereço de e-mail da sua conta de serviço (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

    7. Na lista Selecionar um papel, selecione o papel Contas de serviço > Usuário da conta de serviço.

    8. Clique em Salvar.

gcloud

  1. Ative as APIs Cloud Build e Workflows.

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. Conceda Papel de administrador de fluxos de trabalho (roles/workflows.admin) à conta de serviço do Cloud Build:

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/workflows.admin
    

    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

  3. Conceda o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço padrão do Compute Engine à conta de serviço do Cloud Build. Quando você tiver ativaram a API Compute Engine; a conta de serviço padrão do Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com

    gcloud iam service-accounts add-iam-policy-binding \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    

Conectar-se ao repositório de origem

Conecte o Cloud Build ao seu repositório de origem O Cloud Build pode automatizar builds em resposta a eventos que acontecem no repositório.

Conclua as etapas a seguir para se conectar ao GitHub ou ao Bitbucket:

  1. No console do Google Cloud, acesse Gatilhos do Cloud Build. página:

    Acessar Gatilhos

  2. Se necessário, selecione o projeto e clique em Abrir.

  3. Na lista Região, selecione a região em que você quer criar o acionador.

  4. Clique em Conectar repositório.

  5. Selecione o repositório de origem em que você armazenou seu código-fonte.

    Por exemplo: GitHub (app GitHub do Cloud Build)

  6. Clique em Continuar.

  7. Autentique o repositório de origem com seu nome de usuário e senha.

    Se você estiver fazendo login no GitHub, será necessário autorizar o App GitHub do Cloud Build para acessar sua conta do GitHub e continuar.

  8. Na lista de repositórios disponíveis, selecione o repositório que você quer e clique em OK.

    Para repositórios externos, como o GitHub e o Bitbucket, você precisa ter permissões de nível de proprietário para o projeto do Google Cloud em que está trabalhando.

  9. Leia a exoneração de responsabilidade e marque a caixa de seleção ao lado para indicar que você concorda com os termos.

  10. Clique em Conectar.

  11. Continuar criando um gatilho de compilação para automatizar os builds do código-fonte No repositório, clique em Criar um gatilho. Caso contrário, clique em Concluído.

Criar um arquivo de configuração do Cloud Build

Um arquivo de configuração de compilação define os campos necessários ao usar uma gatilho de compilação para iniciar um build. Crie o arquivo de configuração na raiz do seu projeto e o grava usando YAML ou JSON.

Por exemplo, o arquivo de configuração a seguir implanta e executa um fluxo de trabalho de teste. e usa um script para verificar a saída. Se o teste for aprovado, o fluxo de trabalho será implantados:

steps:
# Deploy the test workflow with the commit sha
- id: 'deploy-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--source', 'gitops/workflow.yaml']

# Run the test workflow and capture the output
- id: 'run-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'gcloud workflows run $_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA > /workspace/testoutput.log']

# Delete the test workflow
- id: 'delete-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'delete', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--quiet']

# Check the test output
- id: 'check-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['gitops/test-$BRANCH_NAME.sh']

# Deploy the workflow
- id: 'deploy-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME', '--source', 'gitops/workflow.yaml']

$BRANCH_NAME e $SHORT_SHA variáveis de substituição são preenchidos pelo Cloud Build quando um build é acionado por um repositório de dados. Eles representam o nome da sua ramificação e os primeiros sete caracteres do ID de confirmação associado ao build, respectivamente.

A variável de substituição $_WORKFLOW_NAME permite que você reutilize um arquivo de configuração com diferentes valores de variáveis. Você pode especificar seu valor ao criar o gatilho de compilação.

Para saber mais, consulte Criar um arquivo de configuração do build.

Criar um acionador de versão

Para automatizar a implantação do fluxo de trabalho, crie um Gatilho do Cloud Build.

Para criar um acionador de build para o arquivo de configuração na seção anterior:

  1. No console do Google Cloud, acesse o Cloud Build Página Gatilhos:

    Acessar Gatilhos

  2. Clique em Criar gatilho.

  3. No campo Nome, insira um nome para o gatilho.

  4. Em Evento, selecione o evento para invocar o acionador.

    Por exemplo: Enviar por push para uma ramificação

  5. Em Origem, selecione seu repositório e o nome da ramificação ou da tag que iniciará o gatilho. Você pode usar uma expressão regular para especificar uma correspondência a uma ramificação ou tag.

    Por exemplo: GoogleCloudPlatform/workflows-demos (repositório) e ^main$|^staging$ (corresponde às ramificações main e staging)

  6. Expanda a seção Mostrar filtros de arquivos incluídos e ignorados e especifique seu fluxo de trabalho como um arquivo incluído. Assim, quando ele for alterado, um build seja invocado.

    Por exemplo: gitops/workflow.yaml

  7. Em Configuração, selecione Arquivo de configuração do Cloud Build (YAML ou JSON) como o tipo e Repositório como o local.

  8. No campo Local do arquivo de configuração do Cloud Build: especificar o local do seu arquivo.

    Por exemplo: gitops/cloudbuild.yaml

  9. Como alternativa, para adicionar uma variável de substituição, clique em Adicionar variável e especifique uma combinação de chave e valor.

    Por exemplo: _WORKFLOW_NAME (variável) e workflows-gitops (valor)

  10. Para salvar o gatilho de build, clique em Criar.

Quando as alterações são enviadas para um fluxo de trabalho na ramificação especificada do repositório do Git, o Cloud Build é acionado automaticamente para implantar o fluxo de trabalho.

Para mais informações, consulte Criar e gerenciar gatilhos de build.

Testar o gatilho de compilação

É possível testar o gatilho de compilação e o arquivo de configuração das seções anteriores.

  1. Na ramificação staging do repositório Git, edite workflow.yaml. Mude Hello World para Bye World:

    main:
      steps:
        - init:
            assign:
              - message: "Hello World"
        - returnResult:
            return: ${message}
  2. Confirme e envie a mudança para a ramificação staging.

    git add workflow.yaml
    git commit -m "Update workflow.yaml in staging"
    git push
    

    O gatilho do Cloud Build é executado e inicia uma compilação.

  3. Para confirmar o sucesso do build, acesse o console do Google Cloud na página Histórico de versões:

    Acessar o histórico de builds

    Após a conclusão de um build, o Cloud Build fornece um status geral para o build e para cada etapa de build individual. Para mais informações, consulte Veja os resultados da versão.

  4. Para confirmar se um fluxo de trabalho de preparação foi implantado, no console do Google Cloud, acesse a página Fluxos de trabalho:

    Acessar fluxos de trabalho

    Você verá um fluxo de trabalho chamado workflows-gitops-staging listado.

  5. Para implantar o fluxo de trabalho de preparação na produção, mescle a ramificação staging à ramificação main:

    git checkout main
    git merge staging
    git push
    

    Como test-main.sh espera Hello World na saída do fluxo de trabalho, o build vai falhar:

    RESULT_EXPECTED="result: '\"Hello World\"'"
    RESULT_ACTUAL=$(grep "result: " $FILE)
    if [[ $RESULT_EXPECTED == $RESULT_ACTUAL ]]; then
      echo "Result test passed"
    else
      echo "Result test failed. Expected: $RESULT_EXPECTED Actual: $RESULT_ACTUAL"; exit 1;
    fi
  6. Para implantar um fluxo de trabalho de produção, edite a ramificação staging Use workflow.yaml de novo e mude a string de volta para Hello World.

  7. Confirme e envie a alteração por push para a ramificação staging e, em seguida, mescle a staging para a ramificação main.

  8. Para confirmar se um fluxo de trabalho de produção foi implantado, faça o seguinte no console do Google Cloud: Acesse a página Fluxos de trabalho:

    Acessar fluxos de trabalho

    Você verá um fluxo de trabalho chamado workflows-gitops-main listado.

A seguir