Como administrador o desarrollador de Code Stream, puede utilizar Code Stream 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, Code Stream 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. Code Stream se comunica con el contenedor mediante NodePort.

Para compartir datos entre ejecuciones de canalización, debe proporcionar una notificación de volumen persistente, y Code Stream 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 Code Stream 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, Code Stream, 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 Code Stream 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 Code Stream 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 Code Stream, 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 Code Stream, 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.
  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
  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 Code Stream 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 Code Stream, 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: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  ports:
    - port: 80
  selector:
    app: codestream
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  selector:
    matchLabels:
      app: codestream
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: codestream
        tier: frontend
    spec:
      containers:
      - name: codestream
        image: cas.jfrog.io/codestream:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: codestream
      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 Code Stream con Jenkins, consulte Cómo se integra Code Stream con Jenkins.