You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Docker镜像自动部署作为Woodpecker CI/CD流水线的最后一步

主流Docker环境下的CI/CD自动部署方案(非Kubernetes)

1. Docker Context远程执行(官方推荐)

这是最贴合Docker生态的远程管理方式,替代直接SSH的零散命令:

  • VPS端配置:修改Docker daemon配置文件/etc/docker/daemon.json,开启远程访问(生产环境务必配TLS加密):
    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
    }
    
    重启Docker服务:systemctl restart docker
  • Woodpecker流水线步骤:
    # 创建并切换到远程VPS的Docker上下文
    docker context create remote-vps --docker "host=tcp://<VPS_IP>:2376"
    docker context use remote-vps
    
    # 拉取镜像并重启应用
    docker pull <GITEA_REGISTRY>/<IMAGE_NAME>:<TAG>
    docker stop <CONTAINER_NAME> || true
    docker rm <CONTAINER_NAME> || true
    docker run -d --name <CONTAINER_NAME> -p <PORT>:<PORT> <GITEA_REGISTRY>/<IMAGE_NAME>:<TAG>
    
  • 优势:完全基于Docker原生工具,无需额外依赖,命令统一规范。

2. Docker Compose远程部署(适合多服务场景)

如果应用用Compose管理,这个方案更简洁可控:

  • VPS端准备:提前放好docker-compose.yml,镜像地址指向你的Gitea仓库:
    services:
      app:
        image: <GITEA_REGISTRY>/<IMAGE_NAME>:<TAG>
        ports:
          - "<PORT>:<PORT>"
        restart: always
    
  • Woodpecker流水线步骤:
    # 连接远程Docker上下文(同方案1配置)
    docker context use remote-vps
    
    # 拉新镜像并重启服务
    docker-compose -f /path/to/docker-compose.yml pull
    docker-compose -f /path/to/docker-compose.yml up -d
    
  • 优势:配置集中管理,更新操作更简洁,支持多服务协同部署。

3. Webhook触发部署(解耦CI与部署端)

通过Webhook实现CI流水线和部署服务器的解耦:

  • VPS端部署Web服务:用Python/Go写轻量服务,监听POST请求,触发部署脚本。示例deploy.sh:
    #!/bin/bash
    docker pull <GITEA_REGISTRY>/<IMAGE_NAME>:<TAG>
    docker stop <CONTAINER_NAME> || true
    docker rm <CONTAINER_NAME> || true
    docker run -d --name <CONTAINER_NAME> -p <PORT>:<PORT> <GITEA_REGISTRY>/<IMAGE_NAME>:<TAG>
    
  • Woodpecker流水线步骤:
    # 带鉴权的Webhook请求(比如加API Key参数)
    curl -X POST -H "X-API-Key: <YOUR_KEY>" http://<VPS_IP>:<PORT>/deploy
    
  • 优势:CI无需直接访问VPS,可扩展日志、告警、灰度发布等功能,安全性更高。

4. 规范版SSH执行脚本

如果偏好SSH,通过以下方式提升规范性:

  • 在Woodpecker中配置SSH密钥为保密变量,避免硬编码凭证
  • 在VPS创建专用部署用户,仅授予Docker操作权限,通过authorized_keys限制可执行命令:
    command="/path/to/deploy.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding <SSH_PUB_KEY>
    
  • Woodpecker流水线步骤:
    ssh deploy@<VPS_IP> "/path/to/deploy.sh <IMAGE_TAG>"
    
  • 优势:保留SSH通用性,通过权限控制和保密变量降低风险。

内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:52:22