Como desarrollador o administrador de Code Stream, puede utilizar el activador de Docker en los servicios de nube de Code Stream. El activador de Docker ejecuta una canalización de entrega continua (Continuous Delivery, CD) independiente cada vez que se crea o se actualiza un artefacto de compilación. El activador de Docker ejecuta la canalización de entrega continua, que envía el artefacto nuevo o actualizado como una imagen de contenedor a un repositorio de Docker Hub. La canalización de entrega continua se puede ejecutar como parte de las compilaciones automatizadas.

Por ejemplo, para implementar constantemente la imagen de contenedor actualizada a través de la canalización de entrega continua, use el activador de Docker. Cuando la imagen del contenedor se carga en el registro de Docker, el webhook de Docker Hub notifica a Code Stream que la imagen cambió. Esta notificación activa la canalización de entrega continua para que se ejecute con la imagen de contenedor actualizada y carga la imagen en el repositorio de Docker Hub.

Para usar el activador de Docker, debe realizar varios pasos en Code Stream.

Tabla 1. Cómo usar el activador de Docker
Qué hacer... Más información sobre esta acción...

Crear un endpoint de registro de Docker

Para que Code Stream active la canalización, debe tener un endpoint de registro de Docker. Si el endpoint no existe, puede seleccionar una opción que lo cree cuando se agregue el webhook relativo al activador de Docker.

El endpoint del registro de Docker incluye la URL que lleva al repositorio de Docker Hub.

Agregar parámetros de entrada a la canalización que insertan automáticamente parámetros de Docker cuando la canalización se ejecuta

Puede insertar parámetros de Docker automáticamente en la canalización. Los parámetros pueden incluir el nombre del propietario del evento de Docker, la imagen, el nombre del repositorio, el espacio de nombres del repositorio y la etiqueta.

En la canalización de entrega continua se incluyen los parámetros de entrada que el webhook de Docker envía a la canalización antes de que esta se active.

Crear un webhook de Docker

Al crear el webhook de Docker en Code Stream, también se crea el webhook correspondiente en Docker Hub. El webhook de Docker en Code Stream se conecta a Docker Hub a través de la URL incluida en el webhook.

Los webhooks se comunican entre sí y activan la canalización cuando un artefacto se crea o actualiza en Docker Hub.

Si actualiza o elimina el webhook de Docker en Code Stream, el webhook de Docker Hub también se actualizará o eliminará.

Agregar y configurar una tarea de Kubernetes en la canalización

Cuando se crea o se actualiza un artefacto en el repositorio de Docker Hub, la canalización se activa. A continuación, implementa el artefacto a través de la canalización en el host de Docker en el clúster de Kubernetes.

Incluir una definición de YAML local en la tarea

La definición de YAML que se usa en la tarea de implementación incluye la imagen de contenedor de Docker y cualquier clave secreta necesaria para extraer la imagen del repositorio para implementarla.

Cuando un artefacto se crea o actualiza en el repositorio de Docker Hub, el webhook de Docker Hub avisa al webhook en Code Stream, lo que activa la canalización. Se producen las siguientes acciones:

  1. Docker Hub envía una solicitud POST a la URL del webhook.
  2. Code Stream ejecuta el activador de Docker.
  3. El activador de Docker inicia la canalización de entrega continua.
  4. La canalización de entrega continua inserta el artefacto en el repositorio de Docker Hub.
  5. Code Stream activa su webhook de Docker, lo que ejecuta una canalización de entrega continua que implementa el artefacto en el host de Docker.

En este ejemplo, se crea un endpoint de Docker y un webhook de Docker en Code Stream que implementan la aplicación en el clúster de Kubernetes de desarrollo. Los pasos incluyen el código de ejemplo de la carga útil que Docker envía a la URL en el webhook, el código de API que este utiliza y el código de autenticación con el token seguro.

Requisitos previos

Procedimiento

  1. Cree un endpoint de registro de Docker.
    1. Haga clic en Endpoints.
    2. Haga clic en Nuevo endpoint.
    3. Introduzca un nombre pertinente.
    4. Si el endpoint del registro de Docker es local, seleccione el proxy de nube. Si el endpoint está basado en la nube, mantenga la opción Predeterminado.
    5. Seleccione el tipo de servidor Docker Hub.
    6. Introduzca la URL que lleva al repositorio de Docker Hub.
    7. Introduzca el nombre y la contraseña que se utilizan para acceder al repositorio.
    Crear un endpoint de registro de Docker
  2. En la canalización de entrega continua, configure las propiedades de entrada para que se inserten parámetros de Docker automáticamente cuando la canalización se ejecute.
    Insertar parámetros de Docker automáticamente en la canalización
  3. Cree un webhook de Docker.
    1. Haga clic en Activadores > Docker.
    2. Haga clic en Nuevo webhook de Docker.
    3. Seleccione un proyecto.
    4. Introduzca un nombre pertinente.
    5. Seleccione el endpoint del registro de Docker.
      Si el endpoint no existe aún, haga clic en Crear endpoint y créelo.
    6. Seleccione la canalización con los parámetros de Docker insertados para que se active el webhook. Consulte Paso 2.
      Si la canalización se configuró con parámetros de entrada personalizados agregados, la lista Parámetros de entrada muestra parámetros y valores. Puede introducir valores para los parámetros de entrada que se transferirán a la canalización con el evento activador. También puede dejar los valores en blanco o utilizar los valores predeterminados si se definieron.

      Para obtener más información sobre los parámetros de la pestaña Entrada, consulte Planificar una compilación nativa de CICD en Code Stream antes de agregar tareas manualmente.

    7. Introduzca el token de API.
      El token de API de CSP lo autentica para las conexiones de API externas con Code Stream. Para obtener el token de API:
      1. Inicie sesión en vRealize Automation Cloud.
      2. Haga clic en la flecha del menú desplegable que aparece junto a su nombre.
      3. Haga clic en Mi cuenta.
      4. Haga clic en Tokens de API.
      5. Haga clic en Generar token.
        1. Introduzca un nombre de token.
        2. En Funciones de organización, seleccione Propietario de la organización.
        3. En Funciones de servicio, haga clic para expandir VMware Code Stream y seleccione Administrador de Code Stream.
        4. Haga clic en Generar.

          La ventana Token generado muestra un token con el nombre que especificó y el nombre de la organización.

      6. Haga clic en el icono COPIAR.

        Si hace clic en COPIAR, se asegura de que se captura la cadena exacta, lo cual resulta más confiable que utilizar el puntero para copiar la cadena.

    8. Introduzca la imagen de compilación.
    9. Introduzca una etiqueta.
      Crear un webhook para el activador de Docker
    10. Haga clic en Guardar.
      La tarjeta del webhook aparece con el webhook de Docker habilitado. Si desea realizar una inserción ficticia en el repositorio de Docker Hub sin activar el webhook de Docker ni ejecutar una canalización, haga clic en Deshabilitar.
  4. En la canalización de entrega continua, configure la tarea de implementación de Kubernetes.
    1. En las propiedades de la tarea de Kubernetes, seleccione el clúster de Kubernetes de desarrollo.
    2. Seleccione la acción Crear.
    3. Seleccione la Definición local del origen de la carga útil.
    4. Tras ello, seleccione el archivo YAML local.
      Por ejemplo, Docker Hub puede publicar esta definición de YAML local como la carga útil en la URL del webhook:
      {
      "callback_url": "https://registry.hub.docker.com/u/svendowideit/testhook/hook/2141b5bi5i5b02bec211i4eeih0242eg11000a/",
      "push_data": {
      "images": [
      "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3",
      "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c",
      "..."
      ],
      "pushed_at": 1.417566161e+09,
      "pusher": "trustedbuilder",
      "tag": "latest"
      },
      "repository": {
      "comment_count": 0,
      "date_created": 1.417494799e+09,
      "description": "",
      "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n",
      "full_description": "Docker Hub based automated build from a GitHub repo",
      "is_official": false,
      "is_private": true,
      "is_trusted": true,
      "name": "testhook",
      "namespace": "svendowideit",
      "owner": "svendowideit",
      "repo_name": "svendowideit/testhook",
      "repo_url": "https://registry.hub.docker.com/u/svendowideit/testhook/",
      "star_count": 0,
      "status": "Active"
      }
      }
      La API que crea el webhook en Docker Hub utiliza este formato: https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      El cuerpo del código JSON se parece a este:
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      Para recibir eventos del servidor de Docker Hub, el esquema de autenticación del webhook de Docker que se crea en Code Stream utiliza un mecanismo de autenticación de lista de permitidos con un token de cadena aleatorio del webhook. Este mecanismo filtra los eventos en función del token seguro, que puede anexar a hook_url.
      Code Stream puede comprobar cualquier solicitud procedente del servidor de Docker Hub usando el token seguro configurado. Por ejemplo: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. Cree un artefacto de Docker en el repositorio de Docker Hub o actualice uno ya existente.
  6. Para confirmar que se produjo la activación y ver la actividad en el webhook de Docker, haga clic en Activadores > Docker > Actividad.
    Ver la actividad de webhook de Docker
  7. Haga clic en Ejecuciones y lleve un seguimiento de la canalización mientras se ejecuta.
    Ver la canalización activada mientras se ejecuta
  8. Haga clic en la etapa en ejecución y vea las tareas a medida que la canalización se ejecuta.
    Ver las tareas en la canalización mientras se ejecuta

Resultados

Enhorabuena. Configure el activador de Docker para ejecutar la canalización de entrega continua de forma continua. Ahora la canalización puede cargar artefactos de Docker nuevos y actualizados en el repositorio de Docker Hub.

Qué hacer a continuación

Compruebe que el artefacto nuevo o actualizado se implementó en el host de Docker, en el clúster de Kubernetes de desarrollo.