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.
Descripción general del flujo de trabajo para implementar una aplicación en un clúster de 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 de producción de los clústeres de Kubernetes en AWS.

Flujo de trabajo para publicar 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, se 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, se puede implementar 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 está 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.
    Endpoint de Jenkins utilizado para compilar, probar y publicar la aplicación en un clúster de Kubernetes
  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.
    Endpoint de Kubernetes utilizado para implementar la aplicación en un clúster de Kubernetes
  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 que la acompaña.
      Cuando la canalización se ejecute, dicha ejecución mostrará el identificador de confirmación que el activador de Git devuelve.
    Canalización de Kubernetes con propiedades de entrada de Git definidas
  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.
    Notificaciones de correo electrónico sobre la canalización y la selección de un servidor de correo electrónico.
  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.
    Canalización de Kubernetes con detalles de la tarea de compilación de la aplicación
  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.
    Webhook de Git utilizado para activar la canalización de Kubernetes
  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.