Questa pagina spiega come connettersi all'host GitLab Enterprise Edition a Cloud Build.
Prima di iniziare
-
Enable the Cloud Build and Secret Manager APIs.
Requisiti dell'host
Se non hai installato un'istanza di GitLab Enterprise Edition Server, consulta la procedura di installazione di GitLab Enterprise Edition.
Quando segui le istruzioni per installare un server GitLab Enterprise Edition tieni presente quanto segue:
Devi configurare l'host in modo che gestisca il protocollo
HTTPS
. Gli host configurati con il protocolloHTTP
non sono supportati.Devi configurare l'host con lo stesso URL utilizzato per raggiungerlo da Google Cloud. Per scoprire di più, consulta la documentazione di GitLab sulla configurazione dell'URL esterno.
Autorizzazioni IAM richieste
Per connettere l'host GitLab Enterprise Edition, concedi la funzionalità Cloud Build
Amministratore connessione (roles/cloudbuild.connectionAdmin
)
al tuo account utente.
Per aggiungere i ruoli richiesti al tuo account utente, consulta Configurare l'accesso alle risorse Cloud Build. Per approfondire i ruoli IAM associati a Cloud Build, consulta Ruoli e autorizzazioni IAM.
Se la tua istanza GitLab Enterprise Edition è ospitata su una rete privata, vedi Creare repository da GitLab Enterprise Edition in una rete privata per sui ruoli IAM aggiuntivi richiesti prima connessione all'host.
Connessione a un host GitLab Enterprise Edition
Prima di creare una connessione all'host per la tua istanza GitLab Enterprise Edition, devi creare token di accesso personale in GitLab Enterprise Edition completando i seguenti passaggi:
Accedi all'istanza GitLab Enterprise Edition.
Nella pagina di GitLab Enterprise Edition per la tua istanza, fai clic sul tuo avatar nell'angolo in alto a destra.
Fai clic su Modifica profilo.
Nella barra laterale sinistra, seleziona Token di accesso.
Viene visualizzata la pagina Token di accesso personali.
Crea un token di accesso con l'ambito
api
da utilizzare per collegare e scollegare i repository.Crea un token di accesso con l'ambito
read_api
per garantire che i repository Cloud Build possano accedere al codice sorgente nei repository.
Console
Per connettere l'host GitLab Enterprise Edition a Cloud Build:
Apri la pagina Repository nella console Google Cloud.
Viene visualizzata la pagina Repositori.
Nella parte superiore della pagina, seleziona la scheda 2a generazione.
Nel selettore di progetti nella barra superiore, seleziona il tuo progetto Google Cloud.
Fai clic su Crea connessione host per connettere un nuovo host a Cloud Build.
Nel riquadro a sinistra, seleziona GitLab come fornitore di origine.
Nella sezione Configura connessione, inserisci le seguenti informazioni:
Regione: seleziona una regione per la connessione.
Nome: inserisci un nome per la connessione.
Nella sezione Dettagli host, seleziona o inserisci quanto segue informazioni:
Provider GitLab: seleziona GitLab Enterprise Edition autogestito come provider.
URL host: inserisci l'URL host per la connessione. Ad esempio,
https://my-gle-server.net
.Certificato CA: fai clic su Sfoglia per caricare il certificato autofirmato.
In Tipo di connessione, seleziona una delle seguenti opzioni:
Rete internet pubblica: seleziona questa opzione se l'istanza è accessibile tramite la rete internet pubblica.
Accesso alla rete privata: seleziona questa opzione se l'istanza è ospitata in una rete privata.
In Servizio directory, seleziona la località del servizio:
- Nel progetto
your-project
- In un altro progetto
- Inserisci manualmente
Se selezioni In un altro progetto o Inserisci manualmente, inserisci le seguenti informazioni:
Progetto: inserisci o seleziona l'ID progetto Google Cloud dal menu a discesa.
Regione: questo campo preseleziona la regione della connessione. La regione specificata per il servizio deve corrispondere a quella associata alla connessione.
Spazio dei nomi: seleziona lo spazio dei nomi del servizio.
Servizio: seleziona il nome del servizio nello spazio dei nomi.
- Nel progetto
Nella sezione Token di accesso personali, inserisci le seguenti informazioni:
Token di accesso all'API: inserisci il token con l'accesso all'ambito
api
. Questo viene utilizzato per collegare e scollegare i repository.Token di accesso alle API in lettura: inserisci il token con accesso all'ambito
read_api
. I trigger di Cloud Build utilizzano questo token per accedere all'origine il codice nei repository.
Fai clic su Connetti.
Dopo aver fatto clic sul pulsante Connetti, i token di accesso personali vengono archiviati in modo sicuro in Secret Manager. Persone che seguo una connessione host, Cloud Build crea anche un secret webhook per tuo conto. Puoi visualizzare e gestire i secret nella pagina di Secret Manager. Puoi visualizzare e gestire i tuoi secret nella Secret Manager .
Hai creato una connessione GitLab Enterprise Edition.
gcloud
Prima di connettere l'host GitLab Enterprise Edition a Cloud Build, completa i seguenti passaggi per archiviare le tue credenziali:
Crea un secret webhook in Secret Manager eseguendo il seguente comando:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
Se memorizzi i tuoi secret in un progetto Google Cloud diverso da quello che prevedi di utilizzare per creare una connessione all'host, inserisci il seguente comando per concedere al tuo progetto l'accesso all'agente di servizio 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"
Dove:
- PROJECT_ID è l'ID del tuo progetto Google Cloud.
Ora puoi procedere con la connessione dell'host GitLab Enterprise Edition a Cloud Build.
Completa i seguenti passaggi:
Inserisci il comando seguente per creare una connessione a 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
Dove:
- CONNECTION_NAME è il nome della tua connessione.
- HOST_URI è l'URI della tua istanza GitLab Enterprise Edition. Ad esempio,
https://my-gle-server.net
. - PROJECT_ID è l'ID del tuo progetto Google Cloud.
- REGION è la regione della tua connessione.
- API_TOKEN è il nome del tuo token con l'ambito
api
. - READ_TOKEN è il nome del tuo token con l'ambito
read_api
. - SECRET_VERSION è la versione del tuo secret.
- WEBHOOK_SECRET è il tuo secret webhook.
Hai creato una connessione GitLab Enterprise Edition.
Terraform
Puoi connettere il tuo host GitLab Enterprise Edition a Cloud Build utilizzando Terraform.
Nel seguente esempio, lo snippet di codice esegue le seguenti operazioni:
- Configura il provider Google Terraform
- Crea un secret per archiviare il tuo token di accesso personale GitLab Enterprise Edition
- Concede all'agente di servizio Cloud Build le autorizzazioni necessarie per accedere ai secret
Crea una connessione 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 ] }
Dove:
- PROJECT_ID è l'ID del tuo progetto Google Cloud.
- GITLAB_PAT_API è il tuo token di accesso personale con
Accesso a
api
. - GITLAB_API_TOKEN è il tuo token di accesso personale.
- GITLAB_PAT_READ è il tuo token di accesso personale
con accesso
read_api
. - WEBHOOK_SECRET è il nome del segreto contenente il valore del segreto dell'webhook.
- WEBHOOK_SECRET_VALUE è il valore del secret webhook.
- REGION è la regione per la tua connessione.
- CONNECTION_NAME è il nome della connessione a GitLab Enterprise Edition.
- URI è l'URI della connessione. Ad esempio,
https://my-gitlab-enterprise-server.net
. Hai creato una connessione GitLab Enterprise Edition.
Passaggi successivi
- Scopri come connettere un repository GitLab Enterprise Edition.
- Scopri come creare ed eseguire il deployment dei tuoi carichi di lavoro su Google Cloud utilizzando i componenti CI/CD gestiti da Google nella tua pipeline GitLab. Vedi GitLab su Google Cloud.