Integración con Jenkins

En esta página se explica cómo configurar Jenkins para almacenar paquetes Maven compilados en un repositorio de Artifact Registry.

Antes de empezar

Si el repositorio de destino no existe, crea uno.

Configurar el acceso a tu repositorio

  1. Crea una cuenta de servicio específica para que Jenkins la use con Artifact Registry.

    Ejecuta el siguiente comando para crear una cuenta de servicio llamada jenkins-sa:

    gcloud iam service-accounts create jenkins-sa
    

    De esta forma, se crea una cuenta de servicio llamada jenkins-sa@PROJECT.iam.gserviceaccount.com, donde PROJECT es el ID de tu proyecto.

  2. En el proyecto que contiene el repositorio, asigna el rol Escritor de Artifact Registry a la cuenta de servicio de Jenkins que has creado. Puedes asignar el rol a todos los repositorios del proyecto o a los repositorios específicos a los que necesite acceder la cuenta de servicio.

    Para obtener más información sobre los permisos y cómo conceder acceso por rol, consulta Configurar el control de acceso.

Configurar un clúster de GKE

Cuando configures un nuevo clúster o grupo de nodos de Google Kubernetes Engine, utiliza la cuenta de servicio que has creado para Jenkins.

Consola

Para crear un clúster mediante la consola de Google Cloud , sigue estos pasos:

  1. Ve al menú Artifact Registry en la consola de Google Cloud .

    Visitar el menú Artifact Registry

  2. Haz clic en Crear clúster.

  3. Configura el clúster como prefieras. No hagas clic en Crear todavía.

  4. Haz clic en Más opciones en el grupo de nodos predeterminado.

  5. En la sección Seguridad, selecciona la cuenta de servicio de Jenkins que has creado.

  6. Haz clic en Guardar para salir de la superposición.

  7. Haz clic en Crear.

gcloud

Usa uno de los siguientes comandos para crear el clúster con la cuenta de servicio de Jenkins. En los comandos, PROJECT es el ID de tu proyecto.

Para crear un clúster con la cuenta de servicio, ejecuta el comando.

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

Para crear un grupo de nodos en un clúster, sigue estos pasos:

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

Para obtener más información sobre el comando, consulta la documentación de gcloud container clusters create.

Configurar Jenkins en GKE

  1. Sigue el tutorial para configurar Jenkins en GKE. Usa el clúster que has creado en la sección anterior.

  2. En Jenkins, actualiza el complemento de GKE a la versión más reciente. Haz clic en Gestionar Jenkins > Gestionar complementos > Actualizaciones.

Configurar un proyecto de Maven

  1. Crea una bifurcación del proyecto de Maven de ejemplo en el repositorio de GitHub de la documentación de Jenkins.

  2. Clona el repositorio bifurcado.

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. Configura una nueva canalización en la interfaz de Jenkins.

    1. Haz clic en Nuevo elemento.
    2. Selecciona Pipeline.
    3. Asigna un nombre a la canalización y haz clic en Aceptar.
  4. En la pestaña General (General), configure las siguientes opciones en la sección Pipeline:

    • Seleccione Pipeline script from SCM (Secuencia de comandos de la canalización de SCM).
    • En la lista desplegable SCM, selecciona Git y, a continuación, especifica la URL y las credenciales para conectarte a tu repositorio de GitHub.

    Captura de pantalla de los ajustes de la canalización

  5. Haz clic en Guardar.

Configurar la conexión al repositorio

Configura Jenkins con el repositorio y las credenciales para conectarte al repositorio.

  1. Añade tu repositorio al pom.xml de Maven. Usa el siguiente comando para imprimir un fragmento que añadir.

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

    Dónde

    • PROJECT es el ID del proyecto. Si se omite esta marca, se usará el proyecto actual o predeterminado.
    • REPOSITORY es el ID del repositorio. Si has configurado un repositorio predeterminado de Artifact Registry, se usará cuando se omita esta marca en el comando.
    • LOCATION es la ubicación regional o multirregional del repositorio.
  2. Crea un archivo YAML como plantilla de pod para los agentes de 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 el archivo Jenkinsfile.

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

Iniciar una compilación

  1. Envía los cambios que has hecho al proyecto de GitHub.

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. En la interfaz de Jenkins, inicia una nueva compilación de la aplicación en tu proyecto Maven de ejemplo.

Cuando la compilación se completa correctamente, los artefactos se añaden al repositorio de paquetes de Java de Artifact Registry que has creado.

Ejecuta el siguiente comando para enumerar los paquetes del repositorio:

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

La salida es similar al siguiente ejemplo:

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