Esta página explica como se ligar ao anfitrião do GitLab Enterprise Edition no Cloud Build.
Antes de começar
-
Enable the Cloud Build and Secret Manager APIs.
Requisitos do anfitrião
Se não tiver instalado uma instância do servidor do GitLab Enterprise Edition, consulte o guia de instalação do GitLab Enterprise Edition para obter instruções.
Quando seguir as instruções para instalar uma instância do servidor do GitLab Enterprise Edition, tenha em atenção o seguinte:
Tem de configurar o seu anfitrião para processar o protocolo
HTTPS
. Os anfitriões configurados com o protocoloHTTP
não são suportados.Tem de configurar o anfitrião com o mesmo URL que é usado para aceder ao anfitrião a partir de Google Cloud. Para saber mais, consulte a documentação do GitLab sobre a configuração do URL externo.
Autorizações de IAM necessárias
Para associar o seu anfitrião do GitLab Enterprise Edition, conceda a função de administrador da ligação (roles/cloudbuild.connectionAdmin
) do Cloud Build à sua conta de utilizador.
Para adicionar as funções necessárias à sua conta de utilizador, consulte o artigo Configurar o acesso aos recursos do Cloud Build. Para saber mais sobre as funções de IAM associadas ao Cloud Build, consulte o artigo Funções e autorizações de IAM.
Se a sua instância do GitLab Enterprise Edition estiver alojada numa rede privada, consulte o artigo Crie repositórios a partir do GitLab Enterprise Edition numa rede privada para saber mais acerca das funções de IAM adicionais necessárias antes da associação do anfitrião.
Crie uma associação a um anfitrião do GitLab Enterprise Edition
Antes de criar uma associação de anfitrião para a sua instância do GitLab Enterprise Edition, tem de criar tokens de acesso pessoal no GitLab Enterprise Edition seguindo estes passos:
Inicie sessão na sua instância do GitLab Enterprise Edition.
Na página do GitLab Enterprise Edition da sua instância, clique no seu avatar no canto superior direito.
Clique em Editar perfil.
Na barra lateral esquerda, selecione Tokens de acesso.
É apresentada a página Tokens de acesso pessoal.
Crie um token de acesso com o âmbito
api
para usar na associação e desassociação de repositórios.Crie um token de acesso com o âmbito
read_api
para garantir que os repositórios do Cloud Build podem aceder ao código-fonte nos repositórios.
Consola
Para associar o anfitrião do GitLab Enterprise Edition ao Cloud Build:
Abra a página Repositórios na Google Cloud consola.
É apresentada a página Repositórios.
Na parte superior da página, selecione o separador 2.ª geração.
No seletor de projetos na barra superior, selecione o seu Google Cloud projeto.
Clique em Criar associação de anfitrião para associar um novo anfitrião ao Cloud Build.
No painel do lado esquerdo, selecione GitLab 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 ou introduza as seguintes informações:
Fornecedor do GitLab: selecione Edição Enterprise do GitLab autogerida como fornecedor.
URL do anfitrião: introduza o URL do anfitrião para a sua ligação. Por exemplo,
https://my-gle-server.net
.Certificado da AC: clique em Procurar para carregar o seu certificado autoassinado.
Em Tipo de associação, selecione uma das seguintes opções:
Internet pública: selecione esta opção se a sua instância for acessível através da Internet pública.
Acesso à rede privada: selecione esta opção se a sua instância estiver alojada numa rede privada.
Em Serviço de diretório de serviços, selecione a localização do seu serviço:
- No projeto
your-project
- Noutro projeto
- Introduza manualmente
Se selecionar Noutro projeto ou Introduzir manualmente, introduza as seguintes informações:
Projeto: introduza ou selecione o seu Google Cloud ID do projeto no menu pendente.
Região: este campo pré-seleciona a região da sua ligação. A região especificada para o seu serviço tem de corresponder à região associada à sua ligação.
Espaço de nomes: selecione o espaço de nomes do seu serviço.
Serviço: selecione o nome do serviço no seu espaço de nomes.
- No projeto
Na secção Tokens de acesso pessoal, introduza as seguintes informações:
Token de acesso à API: introduza o token com o acesso ao âmbito
api
. Este token é usado para associar e desassociar repositórios.Ler chave de acesso à API: introduza a chave com o âmbito
read_api
de acesso. Os acionadores do Cloud Build usam este token para aceder ao código-fonte nos repositórios.
Clique em Ligar.
Depois de clicar no botão Associar, os seus tokens de acesso pessoal são armazenados em segurança no Secret Manager. Após a ligação do anfitrião, o Cloud Build também cria um segredo de webhook em seu nome. Pode ver e gerir segredos na página Secret Manager. Pode ver e gerir os seus segredos na página do Secret Manager.
Criou com êxito uma ligação do GitLab Enterprise Edition.
gcloud
Antes de associar o seu anfitrião do GitLab Enterprise Edition ao Cloud Build, conclua os passos seguintes para armazenar as suas credenciais:
Crie um segredo de webhook no Secret Manager executando o seguinte comando:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
Se armazenar os seus segredos num Google Cloud projeto diferente do que planeia usar para criar uma ligação de anfitrião, introduza o seguinte comando para conceder ao seu projeto acesso ao agente do serviço Cloud Build:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT} \ --role="roles/secretmanager.admin"
Onde:
- PROJECT_ID é o ID do seu Google Cloud projeto.
Já pode continuar a associar o seu anfitrião do GitLab Enterprise Edition ao Cloud Build.
Conclua os seguintes passos:
Introduza o seguinte comando para criar uma ligação do GitLab Enterprise Edition:
gcloud builds connections create gitlab CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_TOKEN/versions/SECRET_VERSION \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION
Onde:
- CONNECTION_NAME é um nome para a sua associação no Cloud Build.
- HOST_URI é o URI da sua instância do GitLab Enterprise Edition. Por exemplo,
https://my-gle-server.net
. - PROJECT_ID é o ID do seu Google Cloud projeto.
- REGION é a região da sua ligação.
- API_TOKEN é o nome do seu token com o âmbito
api
. - READ_TOKEN é o nome do seu token com o âmbito
read_api
. - SECRET_VERSION é a versão do seu segredo.
- WEBHOOK_SECRET é o seu código secreto do webhook.
Criou com êxito uma ligação do GitLab Enterprise Edition.
Terraform
Pode associar o seu anfitrião do GitLab Enterprise Edition 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 segredo para armazenar o seu token de acesso pessoal do GitLab Enterprise Edition
- Concede as autorizações necessárias ao agente de serviço do Cloud Build para aceder a segredos
Cria uma ligação do GitLab Enterprise Edition
// Configure the Terraform Google provider terraform { required_providers { google = {} } } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "api-pat-secret" { project = "PROJECT_ID" secret_id = "GITLAB_PAT_API" replication { auto {} } } resource "google_secret_manager_secret_version" "api-pat-secret-version" { secret = google_secret_manager_secret.api-pat-secret.id secret_data = "GITLAB_API_TOKEN" } resource "google_secret_manager_secret" "read-pat-secret" { project = "PROJECT_ID" secret_id = "GITLAB_PAT_READ" replication { auto {} } } resource "google_secret_manager_secret_version" "read-pat-secret-version" { secret = google_secret_manager_secret.pat-secret.id secret_data = "GITLAB_API_TOKEN" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET" 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" "serviceagent-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.private-key-secret.project secret_id = google_secret_manager_secret.private-key-secret.secret_id policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { 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.serviceagent-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.serviceagent-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" gitlab_config { authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.pat-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 ID do seu Google Cloud projeto.
- GITLAB_PAT_API é a sua chave de acesso pessoal com acesso de
api
. - GITLAB_API_TOKEN é o seu token de acesso pessoal.
- GITLAB_PAT_READ é a sua chave de acesso pessoal com acesso
read_api
. - WEBHOOK_SECRET é o nome do segredo que contém o valor secreto do webhook.
- WEBHOOK_SECRET_VALUE é o valor do seu segredo de webhook.
- REGION é a região da sua ligação.
- CONNECTION_NAME é um nome para a ligação do anfitrião do GitLab Enterprise Edition no Cloud Build.
- URI é o URI da sua ligação. Por exemplo,
https://my-gitlab-enterprise-server.net
. Criou com êxito uma ligação do GitLab Enterprise Edition.
O que se segue?
- Saiba como associar um repositório do GitLab Enterprise Edition.
- Saiba como criar e implementar as suas cargas de trabalho para Google Cloud usando componentes de CI/CD geridos pela Google no seu pipeline do GitLab. Consulte GitLab em Google Cloud.