Crea repository da GitLab

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina spiega come creare repository da GitLab utilizzando i trigger webhook. Se vuoi creare repository da GitLab Enterprise Edition, consulta Creazione di repository da GitLab Enterprise Edition.

Prima di iniziare

  • Abilita le API Cloud Build and Secret Manager.

    Abilita le API

  • Per utilizzare i comandi gcloud in questa pagina, installa Google Cloud CLI.

Configurazione in corso…

Prima di creare un trigger webhook per creare su GitLab, devi creare una chiave SSH per autenticare la connessione a GitLab. Quando crei un trigger senza un repository associato e accedi al codice su un sistema di gestione del codice sorgente esterno, come GitLab, devi recuperare la chiave SSH nella configurazione della build in linea.

Questa sezione illustra come creare e archiviare la tua chiave SSH prima di creare un trigger webhook.

Creazione di una chiave SSH

Per accedere al tuo codice su GitLab, dovrai recuperare una chiave SSH nella tua configurazione di build in linea.

Per creare una chiave SSH:

  1. Apri una finestra del terminale.

  2. Crea una nuova directory denominata working-dir e accedi alla directory:

    mkdir working-dir
    cd working-dir
    
  3. Crea una nuova chiave SSH GitLab, dove gitlab.com è l'URL per il tuo repository GitLab:

    ssh-keygen -t rsa -b 4096 -N '' -C gitlab.com -f id_gitlab
    

    Il comando crea una nuova chiave SSH in working-dir/id_gitlab senza una passphrase per la chiave SSH. Cloud Build non può utilizzare la tua chiave SSH se è protetta tramite una passphrase.

Attivazione dell'accesso SSH su GitLab

Dovrai consentire l'accesso SSH su GitLab per consentire agli utenti sul server di aggiungere le proprie chiavi SSH e utilizzarle per proteggere le operazioni Git tra il computer e l'istanza GitLab. Per informazioni su come utilizzare SSH con GitLab, consulta GitLab e le chiavi SSH.

Aggiunta della chiave di accesso SSH pubblica a GitLab

Per proteggere le operazioni eseguite da altri sistemi nei tuoi repository gestiti in GitLab, dovrai aggiungere la tua chiave di accesso SSH pubblica a GitLab. Per informazioni su come aggiungere la chiave, vedi Aggiungere una chiave SSH all'account GitLab.

Creazione e archiviazione delle credenziali in Secret Manager

Quando crei una chiave SSH, viene creato un file id_gitlab nel tuo ambiente locale. Poiché questo file contiene informazioni sensibili associate all'autenticazione, devi archiviarlo in Secret Manager prima di utilizzarlo per richiamare una build.

Oltre al secret utilizzato durante la creazione di un trigger webhook, dovrai anche creare un secret in Secret Manager per convalidare e autorizzare gli eventi webhook in arrivo in Cloud Build.

Per creare e archiviare le tue credenziali in Secret Manager:

  1. Vai alla pagina Secret Manager in Google Cloud Console:

    Vai alla pagina Secret Manager

  2. Nella pagina Secret Manager, fai clic su Crea secret.

  3. Nella pagina Crea secret, in Nome, inserisci un nome per il secret.

  4. Nel campo Valore secret, inserisci un nome per il secret o carica un file.

    Per caricare il file della chiave SSH, fai clic su Carica per includere il file working-dir/id_gitlab.

  5. Non modificare la sezione Regioni.

  6. Fai clic sul pulsante Crea secret per creare il secret.

Dopo aver creato il secret, Google Cloud Console concede automaticamente il ruolo Funzione di accesso secret di Secret Manager al tuo account di servizio Cloud Build, ${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Se non vedi questo ruolo nel tuo account di servizio, completa i passaggi seguenti descritti in Concessione del ruolo Secret Manager all'account di servizio.

Ora che hai archiviato la chiave SSH, puoi anche eliminarla dal tuo ambiente eseguendo il comando seguente:

rm id_gitlab*

Ora è tutto pronto per la creazione del trigger webhook.

Creazione di trigger webhook

Console

Per creare un trigger webhook che richiama le build da GitLab utilizzando Google Cloud Console:

  1. Apri la pagina Attivatori:

    Apri la pagina Trigger di build

  2. Seleziona il progetto nella parte superiore della pagina e fai clic su Apri.

  3. Fai clic su Crea trigger.

  4. Inserisci le seguenti impostazioni di attivazione:

    • Nome: un nome per l'attivatore.
    • Area geografica: seleziona l'area geografica per l'attivatore.

      • Se selezioni globale come area geografica, Cloud Build utilizza il pool predefinito per eseguire la build.
      • Se selezioni un'area geografica non globale e il file di configurazione di compilazione associato al trigger specifica un pool privato, Cloud Build utilizza il pool privato per eseguire la build. In questo caso, la regione specificata nel trigger deve corrispondere a quella in cui hai creato il pool privato.
      • Se selezioni un'area geografica non globale e il file di configurazione di compilazione associato al trigger non specifica un pool privato, Cloud Build utilizza il pool predefinito per eseguire la build nella stessa regione del trigger.
    • (Facoltativo) Descrizione: una descrizione dell'attivatore.

    • Evento: seleziona Evento webhook per configurare il trigger in modo da avviare le build in risposta agli eventi webhook in arrivo.

    • URL webhook: utilizza l'URL webhook per autenticare gli eventi webhook in entrata.

      • Secret: ti servirà un secret per autenticare gli eventi webhook in arrivo. Puoi creare un nuovo secret o utilizzarne uno esistente. Il secret è separato dal secret associato alla chiave SSH.

        Per creare un nuovo secret:

        1. Seleziona Crea nuova.
        2. Fai clic su Crea secret.

          Verrà visualizzata la finestra popup Crea un secret webhook.

        3. Nel campo Nome secret, inserisci un nome per il secret.

        4. Fai clic su Crea secret per salvare il secret, che verrà creato e archiviato automaticamente in Secret Manager.

        Per utilizzare un secret esistente:

        1. Seleziona Utilizza esistente.
        2. Nel campo Secret, seleziona il nome del secret che vuoi utilizzare dal menu a discesa o segui le istruzioni per aggiungere un secret in base all'ID risorsa.
        3. Nel campo Versione del secret, seleziona la versione del tuo secret dal menu a discesa.

        Se utilizzi un secret esistente, potresti dover concedere manualmente il ruolo Secret Accessor Secret Manager al tuo account di servizio Cloud Build, service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Per scoprire di più, consulta Concedere il ruolo Secret Manager all'account di servizio.

      Dopo aver creato o selezionato il secret, vedrai un'anteprima dell'URL webhook. L'URL contiene una chiave API generata da Cloud Build e dal secret. Se Cloud Build non è in grado di recuperare la chiave API, puoi aggiungerla manualmente all'URL o scoprire come ottenere una chiave API se non ne hai ancora una.

      Puoi utilizzare l'URL per richiamare un evento webhook effettuando una richiesta HTTP con il metodo POST.

      Se hai selezionato globale come area geografica, utilizza il comando seguente per richiamare un evento webhook:

      curl -X POST -H "application/json" "https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY}&secret=${SECRET_VALUE}" -d "{}"
      

      Se selezioni un'area geografica non globale, ad esempio us-central1, utilizza il seguente comando per richiamare un evento webhook:

      curl -X POST -H "application/json" "https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY}&secret=${SECRET_VALUE}&trigger=${TRIGGER_NAME}&projectId=${PROJECT_ID}" -d "{}"
      

      Per scoprire come utilizzare l'URL durante la creazione di un webhook in GitLab, consulta Creare un webhook in GitLab.

    • (Facoltativo) Origine: il repository da creare quando viene eseguito il trigger webhook. Lascia vuoto questo campo. In questo esempio, la configurazione di compilazione è una configurazione di compilazione in linea, quindi non è necessaria un'origine.

    • Configurazione: crea una configurazione di compilazione in linea in Google Cloud Console.

      Nell'esempio seguente, la configurazione di build in linea autentica la tua connessione a GitLab utilizzando la tua chiave SSH e accede al repository specificato. In seguito, controlla il commit che ha richiamato il webhook.

      steps:
      # first, setup SSH:
      # 1- save the SSH key from Secret Manager to a file
      # 2- add the host key to the known_hosts file
      - name: gcr.io/cloud-builders/git
        args:
          - '-c'
          - |
            echo "$$SSHKEY" > /root/.ssh/id_rsa
            chmod 400 /root/.ssh/id_rsa
            ssh-keyscan gitlab.com > /root/.ssh/known_hosts
        entrypoint: bash
        secretEnv:
          - SSHKEY
        volumes:
          - name: ssh
            path: /root/.ssh
      # second, clone the repository
      - name: gcr.io/cloud-builders/git
        args:
          - clone
          - '-n'
          - 'git@gitlab.com/GITLAB_REPO'
          - .
        volumes:
          - name: ssh
            path: /root/.ssh
      # third, checkout the specific commit that invoked this build
      - name: gcr.io/cloud-builders/git
        args:
          - checkout
          - $_TO_SHA
      availableSecrets:
        secretManager:
        - versionName: PATH_TO_SECRET_VERSION
          env: SSHKEY
      

      Dove:

      • GITLAB_REPO è il percorso del repository GitLab.
      • PATH_TO_SECRET_VERSION è il percorso della versione del secret archiviato in Secret Manager. Questo è il secret che contiene la chiave SSH. Ad esempio, projects/project-id/secrets/secret-name/versions/1
      • SSHKEY è il nome dell'ambiente utilizzato in questo caso per archiviare il percorso del secret.
    • (Facoltativo) Sostituzioni: puoi scegliere di definire variabili di sostituzione specifiche per il trigger utilizzando questo campo.

      In questo esempio, supponiamo che tu voglia cercare un nome di ramo specifico associato a un ID commit e poi passare a quel nome di ramo nella definizione della build. Per ottenere questi dati, puoi creare variabili di sostituzione utilizzando le associazioni del payload per salvare il nome del ramo.

      Specifica le seguenti variabili e valori di seguito:

      Nome variabile Valore della variabile
      _BRANCH $(body.ref)
      _TO_SHA $(body.after)

      Per visualizzare il payload associato agli eventi di GitLab, visita la pagina della documentazione di GitLab su Eventi.

    • (Facoltativo) Filtri: puoi creare una regola all'interno di un trigger che determini se eseguire o meno una build in base alle variabili di sostituzione.

      Poiché vuoi che il trigger esegua una build se il nome del ramo corrisponde a main, puoi utilizzare l'operatore "==" per verificare le corrispondenze esatte. Puoi anche utilizzare la parola chiave "corrisponde a" se vuoi trovare una corrispondenza tramite espressione regolare.

      Specifica quanto segue come filtri:

      • _BRANCH == refs/heads/main

      Per visualizzare una sintassi di esempio per i filtri che puoi applicare ai trigger webhook, consulta Utilizzo di CEL per filtrare gli eventi di build.

  5. Fai clic su Crea per creare il trigger di build.

gcloud

Per creare un trigger webhook che richiama build da GitLab:

     gcloud alpha builds triggers create webhook \
       --name=TRIGGER_NAME \
       --secret=PATH_TO_SECRET \
       --substitutions='' \
       --filter='' \
       --inline-config=PATH_TO_INLINE_BUILD_CONFIG \ # or --repo=PATH_TO_REPO
       --branch=BRANCH_NAME #  or --tag=TAG_NAME

Dove:

  • TRIGGER_NAME è il nome del tuo attivatore.
  • PATH_TO_SECRET è il percorso del secret come archiviato in Secret Manager. Ad esempio, projects/my-project/secrets/my-secret/versions/2.
  • PATH_TO_INLINE_BUILD_CONFIG è il percorso della configurazione della build in linea. Sebbene la configurazione di compilazione sia archiviata in linea sul trigger che stai creando, il percorso di configurazione qui viene estratto da un file locale.
  • PATH_TO_REPO è il percorso del repository per richiamare una build su. Ad esempio, https://gitlab.com/project-namespace. L'URL del repository deve essere un repository connesso di Cloud Build.

  • BRANCH_NAME è il nome del ramo se vuoi impostare il trigger per creare un ramo.

  • TAG_NAME è il nome del tag se vuoi impostare l'attivatore in modo che utilizzi i tag.

Creazione di un webhook in GitLab in corso...

Affinché GitLab possa effettuare richieste a Cloud Build, devi creare un webhook in GitLab seguendo le istruzioni riportate nella documentazione di GitLab per i Webhook.

Ogni volta che gli aggiornamenti al tuo repository corrispondono all'evento di trigger specificato nel webhook, una build viene richiamata automaticamente dai trigger di Cloud Build.

Passaggi successivi