Implemente um fluxo de trabalho a partir de um repositório Git com o Cloud Build

Pode usar um acionador do Cloud Build para iniciar automaticamente uma compilação e implementar um fluxo de trabalho a partir de um repositório Git. Pode configurar o acionador para implementar o fluxo de trabalho em qualquer alteração ao repositório de origem ou implementar o fluxo de trabalho apenas quando a alteração corresponder a critérios específicos.

Esta abordagem pode ajudar a gerir o ciclo de vida da implementação. Por exemplo, pode implementar alterações num fluxo de trabalho num ambiente de preparação, executar testes nesse ambiente e, em seguida, implementar gradualmente estas alterações no ambiente de produção.

Antes de começar

Estas instruções pressupõem que tem a função de editor do Cloud Build (roles/cloudbuild.builds.editor) no seu Google Cloud projeto para poder criar acionadores. Também precisa de um fluxo de trabalho num repositório de origem, como o GitHub ou o Bitbucket.

Consola

  1. Ative as APIs Cloud Build e Workflows.

    Ative as APIs

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

    1. Na Google Cloud consola, aceda à página IAM.

      Aceda ao IAM

    2. Selecione o seu 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 outra função.

    5. Na lista Função, selecione a função Administrador de fluxos de trabalho.

    6. Clique em Guardar.

  3. Conceda a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço predefinida do Compute Engine à conta de serviço do Cloud Build. Quando ativa a API Compute Engine, a conta de serviço predefinida do Compute Engine é PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    1. Na Google Cloud consola, aceda à página Contas de serviço.

      Aceda a Contas de serviço

    2. Selecione o seu projeto.

    3. Clique no endereço de email da conta de serviço predefinida do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    4. Clique no separador Autorizações.

    5. Clique no botão Conceder acesso.

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

    7. Na lista Selecionar uma função, selecione a função Contas de serviço > Utilizador da conta de serviço.

    8. Clique em Guardar.

gcloud

  1. Ative as APIs Cloud Build e Workflows.

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. Conceda a função de administrador dos 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 seu Google Cloud projeto.

  3. Conceda a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço predefinida do Compute Engine à conta de serviço do Cloud Build. Quando ativa a API Compute Engine, a conta de serviço predefinida 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
    

Faça a ligação ao repositório de origem

Tem de associar o Cloud Build ao seu repositório de origem para que o Cloud Build possa automatizar compilações em resposta a eventos que ocorrem no repositório.

Conclua os passos seguintes para estabelecer ligação ao GitHub ou ao Bitbucket:

  1. Na Google Cloud consola, aceda à página Triggers do Cloud Build:

    Aceda a Acionadores

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

  3. Na lista Região, selecione a região onde quer criar o acionador.

  4. Clique em Associar repositório.

  5. Selecione o repositório de origem onde armazenou o código fonte.

    Por exemplo: GitHub (app GitHub do Cloud Build)

  6. Clique em Continuar.

  7. Autentique-se no repositório de origem com o seu nome de utilizador e palavra-passe.

    Se estiver a iniciar sessão no GitHub, é-lhe pedido que autorize a app GitHub do Google Cloud Build a aceder à sua conta do GitHub para continuar.

  8. Na lista de repositórios disponíveis, selecione o repositório pretendido e, de seguida, clique em OK.

    Para repositórios externos, como o GitHub e o Bitbucket, tem de ter autorizações ao nível do proprietário para o Google Cloud projeto no qual está a trabalhar.

  9. Leia a exclusão de responsabilidade e selecione a caixa de verificação junto à mesma para indicar que consente com os termos.

  10. Clique em Ligar.

  11. Para continuar a criar um acionador de compilação para automatizar as compilações do código-fonte no repositório, clique em Criar um acionador. Caso contrário, clique em Concluído.

Crie um ficheiro de configuração do Cloud Build

Um ficheiro de configuração de compilação define os campos necessários quando usa um acionador de compilação para iniciar uma compilação. Crie o ficheiro de configuração no diretório raiz do projeto e escreva-o com YAML ou JSON.

Por exemplo, o ficheiro de configuração seguinte implementa e executa um fluxo de trabalho de teste e, em seguida, usa um script para verificar o resultado. Se o teste for aprovado, o fluxo de trabalho é implementado:

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']

As $BRANCH_NAME e as $SHORT_SHA variáveis de substituição são preenchidas pelo Cloud Build quando uma compilação é acionada a partir de um repositório Git. Representam o nome da sua ramificação e os primeiros sete carateres do ID de confirmação associado à sua compilação, respetivamente.

A variável de substituição $_WORKFLOW_NAME permite reutilizar um ficheiro de configuração com diferentes valores de variáveis. Pode especificar o respetivo valor quando cria o acionador de compilação.

Para mais informações, consulte o artigo Crie um ficheiro de configuração de compilação.

Crie um acionador de versão

Pode automatizar a implementação do seu fluxo de trabalho criando um acionador do Cloud Build.

Para criar um acionador de compilação para o ficheiro de configuração na secção anterior:

  1. Na Google Cloud consola, aceda à página Cloud Build Triggers:

    Aceda a Acionadores

  2. Clique em Criar acionador.

  3. No campo Nome, introduza um nome para o acionador.

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

    Por exemplo: Enviar para um ramo

  5. Em Origem, selecione o repositório e o nome da ramificação ou da etiqueta que vai iniciar o acionador. Pode usar uma expressão regular para especificar uma correspondência com um ramo ou uma etiqueta.

    Por exemplo: GoogleCloudPlatform/workflows-demos (repositório) e ^main$|^staging$ (corresponde aos ramos main e staging)

  6. Expanda a secção Mostrar filtros de ficheiros incluídos e ignorados e especifique o seu fluxo de trabalho como um ficheiro incluído para que, quando for alterado, seja invocado um processo de compilação.

    Por exemplo: gitops/workflow.yaml

  7. Para Configuração, selecione Ficheiro de configuração do Cloud Build (YAML ou JSON) como o tipo e Repositório como a localização.

  8. No campo Localização do ficheiro de configuração do Cloud Build, especifique a localização do ficheiro.

    Por exemplo: gitops/cloudbuild.yaml

  9. Opcionalmente, 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 guardar o acionador de compilação, clique em Criar.

Quando são enviadas alterações para um fluxo de trabalho no ramo especificado do repositório Git, o Cloud Build aciona automaticamente a implementação do fluxo de trabalho.

Para mais informações, consulte o artigo Crie e faça a gestão de acionadores de compilação.

Teste o acionador de versão

Pode testar o acionador de compilação e o ficheiro de configuração das secções anteriores.

  1. No ramo staging do repositório Git, edite workflow.yaml e altere Hello World para Bye World:

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

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

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

  3. Para confirmar o êxito da compilação, na Google Cloud consola, aceda à página Histórico de compilações:

    Aceda a Criar histórico

    Após a conclusão de uma compilação, o Cloud Build fornece um estado geral para a compilação e para cada passo de compilação individual. Para mais informações, consulte o artigo Veja os resultados da compilação.

  4. Para confirmar que um fluxo de trabalho de preparação está implementado, na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

    Deve ver um fluxo de trabalho com o nome workflows-gitops-staging.

  5. Para implementar o fluxo de trabalho de preparação em produção, sincronize o ramo staging com o ramo main:

    git checkout main
    git merge staging
    git push
    

    Tenha em atenção que, uma vez que test-main.sh está à espera de Hello World no resultado do fluxo de trabalho, a compilação falha:

    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 implementar com êxito um fluxo de trabalho de produção, no ramo staging, edite novamente workflow.yaml e altere a string novamente para Hello World.

  7. Confirme e envie a alteração para o ramo staging e, em seguida, sincronize o ramo staging com o ramo main.

  8. Para confirmar que um fluxo de trabalho de produção está implementado, na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

    Deve ver um fluxo de trabalho com o nome workflows-gitops-main.

O que se segue?