Como administrador o desarrollador de Automation Pipelines, puede utilizar Automation Pipelines y VMware Tanzu Kubernetes Grid Integrated Edition (anteriormente denominado VMware Enterprise PKS) para automatizar la implementación de las aplicaciones de software en un clúster de Kubernetes. En este caso práctico se mencionan otros métodos que se pueden utilizar para automatizar el lanzamiento de aplicaciones.

En este caso práctico, creará una canalización compuesta por dos etapas y utilizará Jenkins para compilar e implementar la aplicación.

  • La primera etapa se centra en el desarrollo. En ella, se usa Jenkins para extraer el código de una rama del repositorio de GitHub y, a continuación, este se compila, prueba y publica.
  • La segunda etapa se centra en la implementación. En ella, se ejecuta una tarea de operación de usuario que requiere la aprobación de los usuarios principales para que la canalización pueda implementar la aplicación en el clúster de Kubernetes.

Cuando se utiliza un endpoint de API de Kubernetes en el área de trabajo de la canalización, Automation Pipelines crea los recursos de Kubernetes necesarios, como ConfigMap, Secret y Pod, para ejecutar la tarea de integración continua (continuous integration, CI) o la tarea personalizada. Automation Pipelines se comunica con el contenedor mediante NodePort.

Para compartir datos entre ejecuciones de canalización, debe proporcionar una notificación de volumen persistente, y Automation Pipelines montará la notificación de volumen persistente en el contenedor para almacenar los datos y utilizarla para ejecuciones de canalización posteriores.

El área de trabajo de canalización de Automation Pipelines admite Docker y Kubernetes para tareas de integración continua y tareas personalizadas.

Para obtener más información sobre la configuración del área de trabajo, consulte Configurar el área de trabajo de la canalización.

El flujo de trabajo que implementa una aplicación en un clúster de Kubernetes utiliza Jenkins, Automation Pipelines, GitHub, el activador de Git y Kubernetes.

Las herramientas de desarrollo, las instancias de implementación y el archivo YAML de la canalización deben estar disponibles para que dicha canalización pueda compilar, probar, publicar e implementar la aplicación. La canalización implementará la aplicación en las instancias de desarrollo y producción de los clústeres de Kubernetes.

El flujo de trabajo le ayuda a completar el proceso de publicación de una aplicación en un clúster de Kubernetes.

Estos son otros métodos que automatizan el lanzamiento de la aplicación:

  • En lugar de usar Jenkins para compilar la aplicación, puede utilizar la capacidad de compilación nativa de Automation Pipelines y un host de compilación de Docker.
  • En lugar de implementar la aplicación en un clúster de Kubernetes, puede implementarla en un clúster de Amazon Web Services (AWS).

Para obtener más información sobre cómo usar la capacidad de compilación nativa de Automation Pipelines y un host de Docker, consulte:

Requisitos previos

  • Compruebe que el código de la aplicación que se va a implementar resida en un repositorio de GitHub en funcionamiento.
  • Compruebe que tiene una instancia de Jenkins en funcionamiento.
  • Compruebe que tiene un servidor de correo electrónico en funcionamiento.
  • En Automation Pipelines, cree un endpoint de correo electrónico que se conecte al servidor de correo electrónico.
  • Configure dos clústeres de Kubernetes en Amazon Web Services (AWS), uno de desarrollo y otro de producción, donde la canalización va a implementar la aplicación.
  • Compruebe que el repositorio de GitHub contiene el código YAML de la canalización y, opcionalmente, un archivo YAML donde se definen los metadatos y las especificaciones del entorno.

Procedimiento

  1. En Automation Pipelines, haga clic en Endpoints > Nuevo endpoint y cree un endpoint de Jenkins, que utilizará en la canalización para extraer el código del repositorio de GitHub.
    El endpoint de una instancia local de Jenkins utiliza un proxy de nube y requiere que introduzca la URL, el nombre de usuario, la contraseña y la ruta de la carpeta de Jenkins.
  2. Para crear endpoints de Kubernetes, haga clic en Nuevo endpoint.
    1. Cree un endpoint para el clúster de Kubernetes de desarrollo.
    2. Cree un endpoint para el clúster de Kubernetes de producción.
      La URL de su clúster de Kubernetes puede incluir o no un número de puerto.
      Por ejemplo:
      https://10.111.222.333:6443
      https://api.kubernetesserver.fa2c1d78-9f00-4e30-8268-4ab81862080d.k8s-user.com
    El endpoint de una instancia local de Kubernetes utiliza un proxy de nube y requiere que introduzca la URL del clúster de Kubernetes, el nombre de usuario y la contraseña.
  3. Cree una canalización que implemente un contenedor de la aplicación (como WordPress) en el clúster de Kubernetes de desarrollo y establezca las propiedades de entrada de la canalización.
    1. Para que la canalización pueda reconocer una confirmación de código en GitHub que active la canalización, haga clic en la pestaña Entrada de la canalización y seleccione Propiedades de inserción automática.
    2. Agregue la propiedad GIT_COMMIT_ID y haga clic en la estrella junto a ella.
      Cuando la canalización se ejecute, dicha ejecución mostrará el identificador de confirmación que el activador de Git devuelve.
    En una canalización que utiliza Jenkins y Kubernetes, la pestaña Entrada muestra las propiedades de entrada de Git.
  4. Agregue notificaciones para enviar un correo electrónico cuando la canalización realice la operación correcta o incorrectamente.
    1. En la canalización, haga clic en la pestaña Notificaciones y, a continuación, en Agregar.
    2. Para agregar una notificación de correo electrónico cuando la canalización termine de ejecutarse, seleccione Correo electrónico y, a continuación, Se completa. Luego, seleccione el servidor de correo electrónico, introduzca las direcciones de correo electrónico y haga clic en Guardar.
    3. Para agregar otra notificación de correo electrónico sobre un error de canalización, seleccione Presenta errores y haga clic en Guardar.
    Cuando agregue una notificación de correo electrónico, seleccione uno de los estados de la canalización, además del servidor de correo electrónico y los destinatarios.
  5. Agregue una etapa de desarrollo a la canalización y agregue tareas que compilen, prueben y publiquen la aplicación. Después, valide cada tarea.
    1. Para compilar la aplicación, agregue una tarea de Jenkins que use el endpoint de Jenkins y ejecute un trabajo de compilación desde el servidor de Jenkins. A continuación, para que la canalización extraiga el código, introduzca la rama de Git con este formato: ${input.GIT_BRANCH_NAME}
    2. Para probar la aplicación, agregue una tarea de Jenkins que use el mismo endpoint de Jenkins y ejecute un trabajo de prueba desde el servidor de Jenkins. A continuación, introduzca la misma rama de Git.
    3. Para publicar la aplicación, agregue una tarea de Jenkins que use el mismo endpoint de Jenkins y ejecute un trabajo de publicación desde el servidor de Jenkins. A continuación, introduzca la misma rama de Git.
    En una canalización que utiliza Jenkins y Kubernetes, la tarea de Jenkins que compila la aplicación utiliza el endpoint de Jenkins, el trabajo de Jenkins y el nombre de rama.
  6. Agregue una etapa de implementación a la canalización y, a continuación, agregue una tarea que requiera aprobación para la implementación de la aplicación y otra tarea que implemente la aplicación en el clúster de Kubernetes. Después, valide cada tarea.
    1. Para requerir una aprobación de la implementación de la aplicación, agregue una tarea de operación de usuario, agregue las direcciones de correo electrónico de los usuarios que deben aprobarla y escriba un mensaje. Luego, habilite Enviar correo electrónico.
    2. Para implementar la aplicación, agregue una tarea de Kubernetes. A continuación, en las propiedades de la tarea de Kubernetes, seleccione el clúster de Kubernetes de desarrollo, seleccione la acción Crear y, después, seleccione el origen de carga útil Definición local. Tras ello, seleccione el archivo YAML local.
  7. Agregue un webhook de Git que permita a Automation Pipelines utilizar el activador de Git, que activa la canalización cuando los desarrolladores confirman sus códigos.
    En el webhook para Git que activa la canalización de Kubernetes, debe introducir la rama y un token secreto.
  8. Para probar la canalización, vaya al repositorio de GitHub, actualice el archivo YAML de la aplicación y confirme el cambio.
    1. En Automation Pipelines, compruebe que la confirmación aparece.
    1. Haga clic en Activadores > Git > Actividad.
    2. Busque el activador de la canalización.
    3. Haga clic en Paneles de control > Paneles de control de canalizaciones.
    4. En el panel de control de la canalización, busque GIT_COMMIT_ID en el área de último cambio realizado correctamente.
  9. Repase el código de la canalización y confirme que el cambio aparece reflejado.

Resultados

Enhorabuena. Automatizó la implementación de la aplicación de software en el clúster de Kubernetes.

Ejemplo: YAML de canalización de ejemplo que implementa una aplicación en un clúster de Kubernetes

El YAML del tipo de canalización utilizado en este ejemplo es similar al siguiente código:

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: pipelines
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: pipelines
spec:
  ports:
    - port: 80
  selector:
    app: pipelines
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: pipelines
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: pipelines
spec:
  selector:
    matchLabels:
      app: pipelines
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pipelines
        tier: frontend
    spec:
      containers:
      - name: pipelines
        image: cas.jfrog.io/pipelines:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: pipelines
      imagePullSecrets:
      - name: jfrog
      

Qué hacer a continuación

Para implementar la aplicación de software en el clúster de Kubernetes de producción, vuelva a realizar los pasos y seleccione el clúster de producción.

Para obtener más información sobre cómo integrar Automation Pipelines con Jenkins, consulte Cómo se integra Automation Pipelines con Jenkins.