Configura Jenkins en Google Kubernetes Engine

En este instructivo, te mostramos cómo configurar Jenkins en GKE para ayudar a organizar tu canalización de entrega de software.

Objetivos

  • Crear un clúster de Kubernetes con GKE.
  • Instalar Jenkins mediante Helm.
  • Conectar con Jenkins.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las API de Compute Engine, GKE, and Cloud Build.

    Habilita las API

Prepara tu entorno

Primero, prepara tu entorno de implementación.

  1. Activa Cloud Shell. Cloud Shell te brinda acceso a la línea de comandos en Cloud Console y, también, incluye el SDK de Cloud y otras herramientas que necesitas para el desarrollo de Google Cloud. Cloud Shell puede tardar varios minutos en aprovisionarse.

    Activar Cloud Shell

    Una vez que se complete el proceso, verás el siguiente resultado:

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. Establece la zona predeterminada de Compute Engine en us-east1-d:

    gcloud config set compute/zone us-east1-d
    
  3. Clona el código de muestra o descarga el archivo zip.

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    El repositorio de Git contiene los manifiestos de Kubernetes que utilizarás para implementar Jenkins. Los manifiestos y su configuración se describen en Cómo configurar Jenkins para GKE.

  4. Dirígete al directorio de código de muestra:

    cd continuous-deployment-on-kubernetes
    

Cómo crear un clúster de Kubernetes

Puedes usar GKE para crear y administrar tu clúster de Kubernetes.

  1. Aprovisiona un clúster de Kubernetes mediante GKE. Este paso puede tardar varios minutos en completarse.

    gcloud container clusters create jenkins-cd \
      --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform" \
      --cluster-version 1.12
    

    Los alcances adicionales permiten a Jenkins acceder a Cloud Source Repositories y a Container Registry.

  2. Confirma que tu clúster se está ejecutando.

    gcloud container clusters list
    

    Busca RUNNING en la columna STATUS.

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.12.8-gke.10     35.231.8.57  n1-standard-2  1.12.8-gke.3   2          RUNNING
    
  3. Confirma que puedes conectarte a tu clúster.

    kubectl cluster-info
    

    Si puedes conectarte con éxito a tu clúster, se muestran las URL de los componentes de Kubernetes.

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    kubernetes-dashboard is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard
    

Cómo instalar Helm

Usa Helm para implementar Jenkins desde el repositorio.

  1. Descarga y, luego, instala el objeto binario de Helm:

    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.1-linux-amd64.tar.gz
    
  2. Descomprime el archivo en tu sistema local:

    tar zxfv helm-v2.14.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. Agrégate como administrador de clústeres en el RBAC del clúster para que puedas otorgar permisos Jenkins en el clúster:

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. Otorga a Tiller, la parte del servidor de Helm, la función cluster-admin en tu clúster:

    kubectl create serviceaccount tiller --namespace kube-system
    kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin \
        --serviceaccount=kube-system:tiller
    
  5. Inicializa Helm. Así se garantiza que Tiller se instale de forma correcta en tu clúster.

    ./helm init --service-account=tiller
    ./helm repo update
    
  6. Asegúrate de que Helm esté instalado correctamente mediante la ejecución del siguiente comando:

    ./helm version
    

    Verás que las versiones para el cliente y el servidor aparecen como v2.14.1:

    Client: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
    

Instala Jenkins

Utilizarás un archivo de valores personalizado para configurar la instalación de Jenkins. Para obtener detalles sobre la configuración, consulta el archivo jenkins/values.yaml.

  1. Utiliza la CLI de Helm para implementar el gráfico con tus ajustes de configuración.

    ./helm install -n cd stable/jenkins -f jenkins/values.yaml --version 1.2.2 --wait
    

    Para obtener más información sobre cómo configurar la instalación de Jenkins, dirígete a la página de documentación de gráficos de Jenkins.

  2. Después de que se complete ese comando, asegúrate de que el pod de Jenkins vaya al estado Running y que el contenedor esté en el estado READY:

    kubectl get pods
    

    Verás 1/1 en la columna READY y Running en la columna STATUS. Jenkins puede tardar unos minutos en completar su inicialización.

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. Configura la redirección de puertos a la IU de Jenkins desde Cloud Shell:

    export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
    
  4. Ahora, verifica que el servicio de Jenkins se haya creado correctamente:

    kubectl get svc
    

    Resultado de ejemplo:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

La instalación de Jenkins utiliza el complemento de Kubernetes para crear agentes de creación. Se ejecutarán automáticamente según sea necesario cuando el máster de Jenkins necesite ejecutar una compilación. Una vez finalizado su trabajo, se terminarán automáticamente y los recursos se agregarán de nuevo al grupo de recursos de clústeres.

Cómo conectarse con Jenkins

  1. Recupera la contraseña de administrador que el gráfico de Jenkins Helm creó automáticamente:

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Para abrir la interfaz de usuario de Jenkins, haz clic en Vista previa en la Web en Cloud Shell y haz clic en Vista previa en el puerto 8080.

    port8080

  3. Haz clic en Acceder en la parte superior derecha de la ventana. Ingresa admin en el campo Usuario y el valor de contraseña del paso anterior para el campo Contraseña.

  4. Haz clic en el botón Acceder.

Ahora tienes acceso a Jenkins y un clúster de Kubernetes administrado por GKE. Para aprovechar aún más esta solución, puedes usar estos componentes en tu canalización de entrega continua.

Limpieza

Una vez que terminaste el instructivo, limpia los recursos que creaste en GCP para que no se facturen en el futuro.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a la página Administrar recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y haz clic en Cerrar para borrar el proyecto.

Borra discos

  1. En Cloud Console, ve a la página Discos.

    Ir a la página Discos

  2. Haz clic en la casilla de verificación para el disco jenkins-home.
  3. Haz clic en Borrar  para borrar el disco.

Borra instancias

Para borrar una instancia de Compute Engine, utiliza lo siguiente:

  1. En Cloud Console, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en la casilla de verificación para La instancia que deseas borrar.
  3. Haz clic en Borrar  para borrar la instancia.

Próximos pasos