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 aplica a la tarea de implementación incluye la imagen de contenedor de Docker. Si necesita descargar una imagen de un repositorio privado, el archivo YAML debe incluir una sección con el secreto de configuración de Docker. Consulte la parte de CD de Planificar una compilación nativa de CICD en Code Stream antes de usar la plantilla de canalización inteligente

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. Comience a escribir el nombre del proyecto existente.
    4. Seleccione el tipo Registro de Docker.
    5. Introduzca un nombre pertinente.
    6. 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.
    7. Seleccione el tipo de servidor DockerHub.
    8. Introduzca la URL que lleva al repositorio de Docker Hub.
    9. Introduzca el nombre y la contraseña que pueden acceder al repositorio.
    Cuando agregue un endpoint de registro de Docker, es importante que acepte el certificado, ya que el endpoint puede requerirlo.
  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.
    Cuando agregue parámetros de entrada a una canalización, haga clic en la pestaña Entrada y seleccione el tipo de los parámetros, como Gerrit, Git o Docker.
  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 Cómo se crea la canalización de CICD y se configura el área de trabajo.

    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.
      Cuando cree un webhook para el activador de Docker, debe proporcionar un token de API que le autentique para las conexiones de API externas con Code Stream.
    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.
    Puede observar las horas de confirmación del webhook de Docker, las imágenes, las etiquetas, etc. en la pestaña Actividad de Docker.
  7. Haga clic en Ejecuciones y observe la canalización mientras se ejecuta.
    Mientras se ejecuta, la canalización muestra el estado EN EJECUCIÓN y los iconos de las etapas muestran el progreso.
  8. Haga clic en la etapa en ejecución y vea las tareas a medida que la canalización se ejecuta.
    Cuando hace clic en uno de los iconos de etapa, puede observar el estado de cada tarea en la etapa mientras se ejecuta la canalización.

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.