作为 DevOps 管理员或开发人员,您可以在 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 容器映像,以及从存储库提取映像以进行部署所需的任何密钥。

在 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 代码以及带有安全令牌的身份验证代码。

前提条件

过程

  1. 创建 Docker 注册表端点。
    1. 单击端点
    2. 单击新建端点
    3. 输入相关的名称。
    4. 如果 Docker 注册表端点是内部部署端点,请选择云代理。如果端点基于云,请保持设置为默认
    5. 选择 Docker Hub 作为服务器类型。
    6. 输入 Docker Hub 存储库的 URL。
    7. 输入用于访问存储库的用户名和密码。
    创建 Docker 注册表端点。
  2. 在 CD 管道中,设置输入属性以在管道运行时自动插入 Docker 参数。
    自动将 Docker 参数插入到管道中。
  3. 创建 Docker Webhook。
    1. 单击触发器 > Docker
    2. 单击为 Docker 新建 Webhook
    3. 选择一个项目。
    4. 输入相关的名称。
    5. 选择您的 Docker 注册表端点。
      如果端点尚未存在,请单击 创建端点以创建端点。
    6. 选择 Webhook 要触发的插入了 Docker 参数的管道。请参见步骤 2
      如果为管道配置了自定义添加的输入参数,则“输入参数”列表将显示参数和值。您可以输入将通过触发器事件传递到管道的输入参数的值。或者,也可以将这些值留空,或使用默认值(如果已定义)。

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

    7. 输入 API 令牌。
      CSP API 令牌将对您进行身份验证,以与 Code Stream 建立外部 API 连接。要获取 API 令牌,请执行以下操作:
      1. 登录到 vRealize Automation Cloud
      2. 单击您的用户名旁边的下拉箭头。
      3. 单击我的帐户
      4. 单击 API 令牌
      5. 单击生成新的 API 令牌
        1. 输入令牌名称。
        2. 在“组织角色”下,选择组织所有者
        3. 在“服务角色”下,单击以展开 VMware Code Stream,然后选择 Code Stream 管理员
        4. 单击生成

          生成的令牌窗口将显示一个令牌,其中包含您指定的名称和组织的名称。

      6. 单击复制图标。

        单击复制可确保您捕获准确的字符串,比使用指针来复制字符串更可靠。

    8. 输入内部版本映像。
    9. 输入标记。
      为 Docker 触发器创建 Webhook。
    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 Webhook 活动。
  7. 单击执行,并在管道运行过程中跟踪管道。
    在运行过程中监视触发的管道。
  8. 单击运行阶段,并在管道运行过程中查看任务。
    在管道运行过程中查看管道中的任务。

结果

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

后续步骤

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