Esta página explica como associar um anfitrião do Bitbucket Cloud ao Cloud Build.
Antes de começar
-
Enable the Cloud Build, Secret Manager, and Compute Engine APIs.
- Certifique-se de que o código-fonte está num repositório do Bitbucket Cloud.
- Certifique-se de que o repositório de origem do Bitbucket Cloud tem um ficheiro
Dockerfile
ou um ficheiro de configuração do Cloud Build. - Instale a CLI Google Cloud para usar os comandos
gcloud
.
Autorizações de IAM necessárias
Para receber as autorizações de que
precisa para estabelecer ligação,
peça ao seu administrador para lhe conceder a função de IAM
Administrador de ligações do Cloud Build (cloudbuild.connectionAdmin
)
na sua conta de utilizador.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Crie tokens de acesso do Bitbucket Cloud
Crie as seguintes duas chaves de acesso no Bitbucket Cloud:
- Token de acesso de administrador: para ligar e desligar repositórios.
- Chave de acesso de leitura: para permitir que o Cloud Build aceda ao seu código fonte.
Para criar estes tokens, siga estes passos:
Inicie sessão no Bitbucket Cloud.
Siga as instruções do Bitbucket Cloud para criar tokens de acesso associados ao seu repositório, projeto ou espaço de trabalho.
Conceda as seguintes autorizações:
Chave de acesso de administrador:
- Repositórios: leitura e administração
- Pedidos de envio: leitura
- Webhooks: Leitura e Escrita
Chave de acesso de leitura:
- Repositórios: leitura
Copie os seus tokens para utilização nos procedimentos seguintes.
Crie uma associação a um anfitrião do Bitbucket Cloud
Consola
Associe o Cloud Build ao seu anfitrião do Bitbucket Cloud concluindo os passos seguintes:
Abra a página Repositórios na Google Cloud consola.
É apresentada a página Repositórios.
No seletor de projetos, selecione o seu Google Cloud projeto.
Na parte superior da página, selecione o separador 2.ª geração.
Clique em Criar associação de anfitrião para associar um novo anfitrião ao Cloud Build.
Selecione Bitbucket como fornecedor de origem.
Na secção Configurar associação, introduza as seguintes informações:
Região: selecione uma região para a sua associação.
Nome: introduza um nome para a ligação.
Na secção Detalhes do anfitrião, selecione Bitbucket Cloud como o tipo de anfitrião.
Espaço de trabalho: introduza o ID do espaço de trabalho para o seu repositório do Bitbucket Cloud.
Chave de acesso: introduza a chave de acesso de administrador criada anteriormente.
Token de acesso de leitura: introduza o token de acesso de leitura criado anteriormente.
Clique em Ligar.
A nova associação é apresentada na página Repositórios.
gcloud
Conclua os passos seguintes para armazenar as suas credenciais:
Armazene os seus tokens de acesso no Secret Manager no seu Google Cloud projeto executando os seguintes comandos:
echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=- echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
Onde:
- ADMIN_TOKEN é o seu token de acesso de administrador.
- ADMIN_SECRET_NAME é o nome que quer dar ao segredo do token de acesso de administrador no Gestor Secreto.
- READ_TOKEN é o seu token de acesso de leitura.
- READ_SECRET_NAME é o nome que quer dar ao seu segredo do token de acesso de leitura no Secret Manager.
Crie um segredo de webhook no Secret Manager executando o seguinte comando, em que WEBHOOK_SECRET_NAME é o nome que quer dar ao segredo de webhook:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
Se os seus segredos não estiverem todos no mesmo projeto, conceda acesso ao agente de serviço do Cloud Build executando o seguinte:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding READ_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor"
Onde:
- PROJECT_ID é o seu Google Cloud ID do projeto.
- ADMIN_SECRET_NAME é o nome do segredo do token de administrador.
- READ_SECRET_NAME é o nome do seu segredo do token de leitura.
- WEBHOOK_SECRET_NAME é o nome do segredo do webhook.
Ligue o Cloud Build ao seu anfitrião do Bitbucket Cloud através do seguinte comando:
gcloud builds connections create bitbucket-cloud CONNECTION_NAME \ --workspace=WORKSPACE_ID \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1
Onde:
- CONNECTION_NAME é o nome que quer dar à ligação ao seu anfitrião do Bitbucket Cloud.
- WORKSPACE_ID é o ID do espaço de trabalho do seu repositório do Bitbucket Cloud.
- PROJECT_ID é o seu Google Cloud ID do projeto.
- REGION é a região da sua ligação de anfitrião.
- ADMIN_SECRET_NAME é o nome do segredo do token de administrador.
- READ_SECRET_NAME é o nome do segredo da chave de acesso de leitura.
- WEBHOOK_SECRET_NAME é o nome do segredo do webhook.
Terraform
Pode associar o seu anfitrião do Bitbucket Cloud ao Cloud Build através do Terraform.
No exemplo seguinte, o fragmento do código faz o seguinte:
- Configura o fornecedor Google do Terraform.
- Cria um Secret do Secret Manager para armazenar os tokens do Bitbucket.
- Concede as autorizações necessárias ao agente de serviço do Cloud Build para aceder a segredos.
Cria uma ligação do Bitbucket Cloud.
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "webhook-secret-secret-version" { secret = google_secret_manager_secret.webhook-secret-secret.id secret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"] } } resource "google_secret_manager_secret_iam_policy" "policy-pak" { project = google_secret_manager_secret.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-whs" { project = google_secret_manager_secret.webhook-secret-secret.project secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } // Create the connection and add the repository resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_cloud_config { workspace = "WORKSPACE_ID" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-token-secret-version.id } webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id } depends_on = [ google_secret_manager_secret_iam_policy.policy-pak, google_secret_manager_secret_iam_policy.policy-rpak, google_secret_manager_secret_iam_policy.policy-whs ] }
Onde:
- PROJECT_ID é o seu Google Cloud ID do projeto.
- PROJECT_NUMBER é o número do seu projeto Google Cloud .
- ADMIN_TOKEN_NAME é o nome do seu token com acesso ao âmbito de
webhook
,repository
,repository:admin
epullrequest
. - ADMIN_TOKEN_VALUE é o valor do seu ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME é o nome do seu token com o âmbito de
repository:read
. - READ_TOKEN_VALUE é o valor do seu READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME é o nome do segredo do webhook.
- WEBHOOK_SECRET_VALUE é o valor do seu WEBHOOK_SECRET_NAME.
- REGION é a região da sua ligação.
- CONNECTION_NAME é o nome da sua associação.
- WORKSPACE_ID é o ID do espaço de trabalho do seu repositório do Bitbucket Cloud.
O que se segue?
- Saiba como estabelecer ligação a um repositório do Bitbucket Cloud.
- Saiba como ver os resultados da compilação.
- Saiba como fazer implementações azul/verde no Compute Engine.