Nesta página, explicamos como se conectar ao host do GitLab Enterprise Edition (em inglês) ao Cloud Build.
Antes de começar
-
Enable the Cloud Build and Secret Manager APIs.
Requisitos do host
Se você não tiver instalado uma instância do GitLab Enterprise Edition Server, consulte a instalação guia do GitLab Enterprise Edition (em inglês) para instruções.
Ao seguir as instruções para instalar uma instância do servidor do GitLab Enterprise Edition, observe o seguinte:
Você precisa configurar seu host para lidar com o protocolo
HTTPS
. Hosts configurados com o protocoloHTTP
não têm suporte.É necessário configurar o host com o mesmo URL usado para acessar o host no Google Cloud. Para saber mais, consulte a documentação do GitLab sobre como configurar o URL externo.
Permissões do IAM obrigatórias
Para conectar seu host do GitLab Enterprise Edition, conceda ao Cloud Build
Administrador da conexão (roles/cloudbuild.connectionAdmin
)
à sua conta de usuário.
Para adicionar os papéis necessários à conta de usuário, consulte Como configurar o acesso aos recursos do Cloud Build. Para saber mais sobre os papéis do IAM associados ao Cloud Build, consulte Papéis e permissões do IAM.
Se a instância do GitLab Enterprise Edition estiver hospedada em uma rede privada, consulte Criar repositórios do GitLab Enterprise Edition em uma rede privada para conhecer os outros papéis do IAM necessários conexão do host.
Como se conectar a um host do GitLab Enterprise Edition
Antes de criar uma conexão de host para sua instância do GitLab Enterprise Edition, você precisa criar tokens de acesso pessoal no GitLab Enterprise Edition concluindo as seguintes etapas:
Faça login 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.
A página Personal Access Tokens será exibida.
Crie um token de acesso com o escopo
api
para usar na conexão e desconexão de repositórios.Criar um token de acesso com o escopo
read_api
para garantir que os repositórios do Cloud Build possam acessar o código-fonte.
Console
Para conectar o host do GitLab Enterprise Edition ao Cloud Build:
Abra a página Repositórios no console do Google Cloud.
Você vai encontrar a página Repositórios.
Na parte de cima da página, selecione a guia 2ª geração.
No seletor de projetos, na barra superior, escolha seu projeto do Google Cloud.
Clique em Criar conexão de host para conectar um novo host ao Cloud Build.
No painel à esquerda, selecione GitLab como o provedor de origem.
Na seção Configurar conexão, insira as seguintes informações:
Região: selecione uma região para sua conexão.
Nome: insira um nome para a conexão.
Na seção Detalhes do host, selecione ou digite o seguinte: informações:
Provedor do GitLab: selecione o GitLab Enterprise Edition autogerenciado como seu provedor.
URL do host: digite o URL do host da sua conexão. Por exemplo,
https://my-gle-server.net
.Certificado de AC: clique em Procurar para fazer upload do certificado autoassinado.
Em Tipo de conexão, selecione uma das seguintes opções:
Internet pública: selecione essa opção se a instância for acessível pela Internet pública.
Acesso à rede particular: selecione essa opção se a instância estiver hospedada em uma rede particular.
Em Serviço do diretório de serviços, selecione o local do seu serviço:
- No projeto
your-project
- Em outro projeto
- Inserir manualmente
Se você selecionar Em outro projeto ou Inserir manualmente, insira o seguintes informações:
Projeto: insira ou selecione o ID do projeto do Google Cloud no menu suspenso.
Região: este campo pré-seleciona a região da sua conexão. A região especificada do seu serviço precisa corresponder à região associada à sua conexão.
Namespace: selecione o namespace do serviço.
Serviço: selecione o nome do serviço no namespace.
- No projeto
Na seção Personal access tokens, insira as seguintes informações:
Token de acesso à API: insira o token com o acesso ao escopo
api
. Isso é usado para conectar e desconectar repositórios.Ler token de acesso à API: insira o token com o acesso de escopo
read_api
. Os gatilhos do Cloud Build usam esse token para acessar o código-fonte em repositórios.
Clique em Conectar.
Depois de clicar no botão Conectar, seus tokens de acesso pessoal serão armazenados com segurança no Secret Manager. Após a conexão do host, o Cloud Build também cria um segredo de webhook em seu nome. É possível ver e gerenciar secrets na página do Secret Manager. É possível consultar e gerenciar os secrets no Secret Manager página.
Você criou uma conexão do GitLab Enterprise Edition.
gcloud
Antes de conectar seu host do GitLab Enterprise Edition ao Cloud Build, siga estas etapas para armazenar suas credenciais:
Crie um secret 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 você armazenar os segredos em um projeto do Google Cloud diferente daquele que pretende usar para criar uma conexão de host, insira o seguinte comando para conceder acesso ao agente de serviço do 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"
Em que:
- PROJECT_ID é o ID do projeto no Google Cloud.
Agora você pode conectar seu host do GitLab Enterprise Edition ao o Cloud Build.
Siga estas etapas:
Digite o seguinte comando para criar uma conexã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
Em que:
- CONNECTION_NAME é o nome da conexão.
- HOST_URI é o URI da instância do GitLab Enterprise Edition. Por exemplo,
https://my-gle-server.net
. - PROJECT_ID é o ID do projeto no Google Cloud.
- REGION é a região da sua conexão.
- API_TOKEN é o nome do seu token com escopo
api
. - READ_TOKEN é o nome do token com escopo
read_api
. - SECRET_VERSION é a versão do secret.
- WEBHOOK_SECRET é o secret do webhook.
Você criou uma conexão do GitLab Enterprise Edition.
Terraform
É possível conectar seu host do GitLab Enterprise Edition ao Cloud Build usando o Terraform.
No exemplo a seguir, o snippet de código faz o seguinte:
- Configura o provedor Terraform do Google
- Cria um secret para armazenar seu token de acesso pessoal do GitLab Enterprise Edition
- Concede as permissões necessárias ao agente de serviço do Cloud Build para acessar os segredos
Cria uma conexão com o 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 ] }
Em que:
- PROJECT_ID é o ID do projeto no Google Cloud.
- GITLAB_PAT_API é seu token de acesso pessoal com
Acesso de
api
. - GITLAB_API_TOKEN é seu token de acesso pessoal.
- GITLAB_PAT_READ é seu token de acesso pessoal
com acesso de
read_api
. - WEBHOOK_SECRET é o nome do secret que contém o valor do secret do webhook.
- WEBHOOK_SECRET_VALUE é o valor do secret do webhook.
- REGION é a região da sua conexão.
- CONNECTION_NAME é o nome da sua conexão do GitLab Enterprise Edition.
- URI é o URI da sua conexão. Por exemplo,
https://my-gitlab-enterprise-server.net
. Você criou uma conexão do GitLab Enterprise Edition.
A seguir
- Saiba como conectar um repositório do GitLab Enterprise Edition.
- Saiba como criar e implantar suas cargas de trabalho no Google Cloud usando componentes de CI/CD gerenciados pelo Google no seu pipeline do GitLab. Consulte GitLab no Google Cloud.