Integrazione con Jenkins

Questa pagina illustra la configurazione di Jenkins per archiviare i pacchetti Maven creati in un repository Artifact Registry.

Prima di iniziare

Se il repository di destinazione non esiste, crea un nuovo repository.

Configurazione dell'accesso al repository

  1. Crea un account di servizio dedicato che Jenkins possa utilizzare con Artifact Registry.

    Esegui il comando seguente per creare un account di servizio denominato jenkins-sa:

    gcloud iam service-accounts create jenkins-sa
    

    Viene creato un account di servizio denominato jenkins-sa@PROJECT.iam.gserviceaccount.com, dove PROJECT è l'ID progetto.

  2. Nel progetto che contiene il repository, concedi il ruolo Artifact Registry Writer all'account di servizio Jenkins che hai creato. Puoi concedere il ruolo per tutti i repository nel progetto o per i repository specifici a cui deve accedere l'account di servizio.

    Per maggiori dettagli sulle autorizzazioni e su come concedere l'accesso in base al ruolo, vedi Configurare il controllo dell'accesso.

Configurazione di un cluster GKE

Quando configuri un nuovo cluster o pool di nodi Google Kubernetes Engine, utilizza l'account di servizio che hai creato per Jenkins.

Console

Per creare un cluster utilizzando la console Google Cloud, segui questi passaggi:

  1. Accedi al menu Artifact Registry nella console Google Cloud.

    Vai al menu Artifact Registry

  2. Fai clic su Crea cluster.

  3. Configura il cluster come preferisci. Non fare ancora clic su Crea.

  4. Fai clic su Altre opzioni nel pool di nodi predefinito.

  5. Nella sezione Sicurezza, seleziona l'account di servizio Jenkins creato.

  6. Fai clic su Salva per uscire dall'overlay.

  7. Fai clic su Crea.

gcloud

Utilizza uno dei seguenti comandi per creare il cluster con l'account di servizio Jenkins. Nei comandi, PROJECT è l'ID progetto.

Per creare un cluster con l'account di servizio, esegui il comando.

gcloud container clusters create example-cluster --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

Per creare un pool di nodi in un cluster esistente:

gcloud container node-pools create example-pool --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

Per ulteriori dettagli sul comando, consulta la documentazione di gcloud container clusters create.

Configurazione di Jenkins su GKE

  1. Segui il tutorial per la configurazione di Jenkins su GKE. Utilizza il cluster creato nella sezione precedente.

  2. In Jenkins, aggiorna il plug-in GKE all'ultima versione. Fai clic su Manage Jenkins > Manage Plugins (Gestisci plug-in) > Updates (Aggiornamenti).

Configurare un progetto Maven

  1. Crea un fork del progetto Maven di esempio nel repository GitHub della documentazione di Jenkins.

  2. Clona il repository creato con fork.

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. Configura una nuova pipeline nell'interfaccia di Jenkins.

    1. Fai clic su Nuovo elemento.
    2. Seleziona Pipeline.
    3. Imposta un nome per la pipeline e fai clic su OK.
  4. Nella scheda Generale, configura le seguenti opzioni nella sezione Pipeline:

    • Seleziona Scriptline di SCM.
    • Nell'elenco a discesa SCM, seleziona Git, quindi specifica l'URL e le credenziali per connetterti al tuo repository GitHub.

    Screenshot delle impostazioni della pipeline

  5. Fai clic su Salva.

Configurazione della connessione al repository

Configura Jenkins con il repository e le credenziali per connetterti al repository.

  1. Aggiungi il tuo repository al Maven pom.xml. Utilizza il comando seguente per stampare uno snippet da aggiungere.

    gcloud artifacts print-settings mvn [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION]
    

    Dove

    • PROJECT è l'ID progetto. Se questo flag viene omesso, viene utilizzato il progetto corrente o predefinito.
    • REPOSITORY è l'ID del repository. Se hai configurato un repository Artifact Registry predefinito, viene utilizzato quando questo flag viene omesso dal comando.
    • LOCATION è la località a livello di una o più aree geografiche per il repository.
  2. Crea un file YAML come modello di pod per gli agenti Jenkins.

    mkdir jenkins
    cat > jenkins/maven-pod.yaml << EOF
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.3.9-jdk-8-alpine
        command: ['cat']
        tty: true
    EOF
    
  3. Modifica il file Jenkinsfile.

    pipeline {
        agent none
        stages {
            stage('Deploy') {
                steps {
                     agent {
                         kubernetes {
                             label 'mavenpod'
                             yamlFile 'jenkins/maven-pod.yaml'
                           }
                       }
                       container('maven') {
                       sh "mvn -B clean deploy"
                     }
                }
            }
        }
    }
    

Avvio di una build

  1. Esegui il push delle modifiche apportate al progetto GitHub.

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. Nell'interfaccia di Jenkins, avvia una nuova build per l'applicazione nel tuo progetto Maven di esempio.

Al completamento della build, gli artefatti vengono aggiunti al repository di pacchetti Java di Artifact Registry che hai creato.

Esegui il comando seguente per elencare i pacchetti nel repository:

gcloud artifacts packages list --repository=mvn-jenkins --location=LOCATION

L'output è simile al seguente esempio:

Listing items under project {YOUR_PROJECT}, repository mvn-jenkins.

PACKAGE                   CREATE_TIME          UPDATE_TIME
com.mycompany.app:my-app  2019-06-25T17:09:44  2019-06-25T17:09:44