作为 Code Stream 管理员或开发人员,您可以在 Code Stream 中使用 Docker 触发器。每当创建或更新生成工件时,Docker 触发器都会运行独立的持续交付 (CD) 管道。Docker 触发器将运行 CD 管道,而该管道会将新的或已更新的工件作为容器映像推送到 Docker Hub 存储库。CD 可以作为自动化内部版本的一部分运行。

例如,要通过 CD 管道持续部署已更新的容器映像,请使用 Docker 触发器。当您的容器映像签入 Docker 注册表时,Docker Hub 中的 Webhook 会通知 Code Stream 该映像已更改。此通知会触发 CD 管道使用更新的容器映像运行,并将该映像上载到 Docker Hub 存储库。

要使用 Docker 触发器,您需要在 Code Stream 中执行几个步骤。

表 1. 如何使用 Docker 触发器
执行的操作... 有关该操作的更多信息...

创建 Docker 注册表端点。

要使 Code Stream 触发管道,您必须有 Docker 注册表端点。如果端点不存在,您可以选择在为 Docker 触发器添加 Webhook 时创建端点。

Docker 注册表端点包含 Docker Hub 存储库的 URL。

向管道添加可在管道运行时自动插入 Docker 参数的输入参数。

可以将 Docker 参数插入到管道。这些参数可以包括 Docker 事件所有者名称、映像、存储库名称、存储库命名空间和标记。

可以在 CD 管道中包含输入参数,Docker Webhook 会在管道触发之前将这些输入参数传递到管道。

创建 Docker Webhook。

Code Stream 中创建 Docker Webhook 时,它还会在创建 Docker Hub 中创建相应的 Webhook。 Code Stream 中的 Docker Webhook 通过包含在 Webhook 中的 URL 连接到 Docker Hub。

Webhook 与彼此通信,并在 Docker Hub 中创建或更新工件时触发管道。

如果在 Code Stream 中更新或删除 Docker Webhook,则 Docker Hub 中的 Webhook 也会更新或删除。

在管道中添加并配置 Kubernetes 任务。

当在 Docker Hub 存储库中创建或更新工件时,管道将触发。然后,通过管道将工件部署到 Kubernetes 集群中的 Docker 主机。

将本地 YAML 定义包含到任务中。

应用于部署任务的 YAML 定义包括 Docker 容器映像。如果需要从专有存储库下载映像,则 YAML 文件必须包含具有 Docker 配置密钥的部分。请参见在使用智能管道模板之前在 Code Stream 中计划 CICD 本机构建中的 CD 部分

在 Docker Hub 存储库中创建或更新工件时,Docker Hub 中的 Webhook 会通知 Code Stream 中的 Webhook,而后者会触发管道。将执行以下操作:

  1. Docker Hub 向 Webhook 中的 URL 发送 POST 请求。
  2. Code Stream 运行 Docker 触发器。
  3. Docker 触发器启动 CD 管道。
  4. CD 管道将工件推送到 Docker Hub 存储库。
  5. Code Stream 触发其 Docker Webhook,后者会运行 CD 管道以将工件部署到 Docker 主机。

在此示例中,您在 Code Stream 中创建一个 Docker 端点和一个 Docker Webhook,以将应用程序部署到 Kubernetes 开发集群。步骤包括 Docker 发布到 Webhook 中的 URL 的负载的示例代码,它使用的 API 代码以及带有安全令牌的身份验证代码。

前提条件

  • 确认您的 Code Stream 实例中存在持续交付 (CD) 管道。还要确认该管道包含一个或多个用于部署应用程序的 Kubernetes 任务。请参见在 Code Stream 中规划本地构建、集成和交付代码
  • 验证您是否可以访问现有 Kubernetes 集群以便 CD 管道将应用程序部署到该集群进行开发。
  • 验证您是 Code Stream 中项目的成员。如果您不是其成员,则让 Code Stream 管理员将您添加为项目的成员。请参见如何在 Code Stream 中添加项目

过程

  1. 创建 Docker 注册表端点。
    1. 单击端点
    2. 单击新建端点
    3. 开始键入现有项目的名称。
    4. 选择 Docker 注册表作为类型。
    5. 输入相关的名称。
    6. 选择 DockerHub 作为服务器类型。
    7. 输入 Docker Hub 存储库的 URL。
    8. 输入可以访问存储库的名称和密码。
    添加“Docker 注册表”端点时,务必接受证书,因为该端点可能需要该证书。
  2. 在 CD 管道中,设置输入属性以在管道运行时自动插入 Docker 参数。
    向管道添加输入参数时,单击输入选项卡并选择参数类型,例如 Gerrit、Git 或 Docker。
  3. 创建 Docker Webhook。
    1. 单击触发器 > Docker
    2. 单击为 Docker 新建 Webhook
    3. 选择一个项目。
    4. 输入相关的名称。
    5. 选择您的 Docker 注册表端点。
      如果端点尚未存在,请单击 创建端点以创建端点。
    6. 选择 Webhook 要触发的插入了 Docker 参数的管道。请参见步骤 2
      如果为管道配置了自定义添加的输入参数,则“输入参数”列表将显示参数和值。您可以输入将通过触发器事件传递到管道的输入参数的值。或者,也可以将这些值留空,或使用默认值(如果已定义)。

      有关输入选项卡上的参数的详细信息,请参见在手动添加任务之前在 Code Stream 中规划 CICD 本地构建

    7. 输入 API 令牌。
      VMware Cloud Services API 令牌将对您进行身份验证,以与 Code Stream 建立外部 API 连接。要获取 API 令牌,请执行以下操作:
      1. 单击生成令牌
      2. 输入与您的用户名和密码关联的电子邮件地址,然后单击生成
        所生成令牌的有效期为六个月。该令牌也称为刷新令牌。
        • 要将令牌保留为变量以供将来使用,请单击创建变量,输入变量的名称,然后单击保存
        • 要将令牌保留为文本值以供将来使用,请单击复制,然后将令牌粘贴到文本文件中以在本地保存。
        您可以选择创建变量并将令牌存储在文本文件中,以供将来使用。
      3. 单击关闭
    8. 输入内部版本映像。
    9. 输入标记。
      为 Docker 触发器创建 Webhook 时,必须提供 API 令牌,以便与 Code Stream 进行外部 API 连接时对您进行身份验证。
    10. 单击保存
      此时将显示 Webhook 卡视图并启用 Docker Webhook。如果要虚拟推送到 Docker Hub 存储库,而不触发 Docker Webhook 和运行管道,请单击 禁用
  4. 在 CD 管道中,配置 Kubernetes 部署任务。
    1. 在 Kubernetes 任务属性中,选择您的 Kubernetes 开发集群。
    2. 选择创建操作。
    3. 为负载源选择本地定义
    4. 然后选择本地 YAML 文件。
      例如,Docker Hub 可能将以下本地 YAML 定义作为负载发布到 Webhook 中的 URL:
      {
      "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"
      }
      }
      用于在 Docker Hub 中创建 Webhook 的 API 采用以下格式: https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      JSON 代码正文类似于:
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      为了从 Docker Hub 服务器接收事件,在 Code Stream 中创建的 Docker Webhook 的身份验证方案对 Webhook 使用允许列表身份验证机制和随机字符串令牌。它基于安全令牌筛选事件,安全令牌可以附加到 hook_url
      Code Stream 可以使用已配置的安全令牌验证来自 Docker Hub 服务器的任何请求。例如: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. 在 Docker Hub 存储库中创建 Docker 工件。或者更新现有工件。
  6. 要确认已触发触发器,并查看 Docker Webhook 上的活动,请单击触发器 > Docker > 活动
    可以在 Docker 活动选项卡上查看 Docker Webhook 提交时间、映像、标记等。
  7. 单击执行,并在管道运行时观察管道。
    管道运行时,显示状态“正在运行”,且阶段图标显示进度。
  8. 单击运行阶段,并在管道运行过程中查看任务。
    单击某个阶段图标时,可以观察在管道运行时该阶段中每个任务的状态。

结果

恭喜!您设置了 Docker 触发器以持续运行 CD 管道。现在,您的管道可以将新的和更新的 Docker 工件上载到 Docker Hub 存储库。

下一步做什么

验证新的或已更新的工件是否已部署到 Kubernetes 开发集群中的 Docker 主机。