自动部署 Docker 镜像作为 CI/CD 管道的最后一步

问题描述 投票:0回答:2

我正在使用 CI/CD 服务器(自托管 Woodpecker)来管理我的应用程序。管道运行所有这些步骤:克隆、构建、测试、打包为容器、推送到容器注册表(自托管 Gitea)。

但是缺少最后一步:“部署”。我不想通过 ssh 进入应用程序服务器(自我管理的 Debian VPS)并手动重新部署 - 我想自动拉取最新的 Docker 映像并重新部署应用程序。我希望这是管道的最后一步。

我可以创建一个管道步骤,使用 ssh 在应用程序服务器上运行脚本。但这感觉有点肮脏 - 在使用 CI/CD 之前,我通过脚本完成了所有事情,但我现在想以现代方式做事。

我不是 CI/CD 专家,所以我不知道这通常是如何完成的?

(我运行的是普通的 Docker 环境,不是 Kubernetes。)

docker continuous-integration continuous-deployment cicd continuous-delivery
2个回答
1
投票

考虑到您没有使用 Kubernetes 这样的编排系统,适合您情况的常见方法是使用 Webhook 触发器,告诉您的服务器在新的 Docker 映像推送到容器注册表时进行更新。

这个过程可以如下进行:

  1. 创建一个简单的应用程序来侦听服务器上的 Webhook。该应用程序应执行以下操作:

    • 验证 Webhook 以确保它来自您的可信来源。
    • 拉取新的 Docker 镜像。
    • 安全地关闭正在运行的应用程序(如果它正在运行)。
    • 使用新的 Docker 映像启动您的应用程序。
  2. 配置您的容器注册表,以便在推送新映像时将 Webhook 发送到此应用程序。

在实施方面:

  • 如果您使用 Gitea,它本身就支持 webhooks。在 Gitea 中,您可以设置一个 webhook,以便在推送新的 Docker 镜像时触发。
  • 您的侦听器应用程序可以是一个用您熟悉的语言编写的简单 HTTP 服务器。它应该侦听 POST 请求(或 Webhook 使用的任何方法),然后运行必要的命令来更新您的应用程序。
  • 对于身份验证,请考虑使用 Gitea 和您的侦听器应用程序都知道的秘密令牌。将此令牌包含在 Webhook 中并让侦听器应用程序验证它。
  • 对于关闭和备份应用程序,Docker Compose 可能是一个很好的工具。如果您在 docker-compose.yml 文件中定义应用程序,则更新就像运行
    docker-compose down && docker-compose pull && docker-compose up -d
    一样简单。

这种方法可以保持 CI/CD 管道清洁,并且不需要通过 SSH 连接到服务器。请记住保护您的侦听器应用程序,因为它将有能力关闭和备份您的应用程序。 Webhooks 的身份验证是必须的。


0
投票

我修改的另外一些方法:

可以创建一个管道步骤,使用 ssh 登录应用程序服务器并运行“部署脚本”。结果将由管道步骤捕获,以便它成为输出日志的一部分。

或者应用程序服务器上的脚本或 cron 作业,轮询 docker 注册表(例如每分钟)以获取新映像,然后重新部署。这将 CI/CD 和应用程序服务器解耦。我认为这更干净,但问题是在重新部署之前总是有一分钟的延迟。

或者是应用服务器上一个单独的 webhook 监听“app”,它从容器注册表中监听特定的 webhook,然后运行脚本。现有的工具可以实现这一点,因此无需编写工具 - 只需编写部署脚本本身即可。似乎最流行的工具是 webhookwebhookd

或者可以使用 watchtower,它接收一个 webhook 然后升级特定容器的镜像。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.