尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何把 Dokku 接入 Woodpecker CI 实现 push 自动部署?

如何把 Dokku 接入 Woodpecker CI 实现 push 自动部署? 如何把 Dokku 接入 Woodpecker CI 实现 push 自动部署【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku当代码仓库向 Dokku 托管的应用推送新代码时你可能希望部署自动发生而不是手动git push。Dokku 提供官方 CI 镜像dokku/ci-docker-image可以在 Woodpecker CI 中通过一条dokku-deploy命令完成自动部署流水线监听 push 事件用 SSH 部署密钥把完整仓库推送到 Dokku 应用触发 Dokku 的构建流水线。本文基于 Woodpecker CI 集成文档 和 通用 CI/CD 集成文档 给出完整的配置路径。前提条件一台已安装 Dokku 的服务器并且应用已经创建例如通过首次git push创建或使用git:initialize初始化。一对本地生成的 SSH 密钥公钥将注册到 Dokku私钥将作为 Woodpecker 的 secret 注入流水线。Woodpecker CI 已可运行你的流水线任务。注意Dokku 的 Git 部署不支持从浅克隆shallow clone推送可能出现未定义行为参见 Git 部署文档 中的警告。Woodpecker 默认的 clone 阶段是浅克隆因此流水线必须显式改为完整克隆这一点在下面的配置中会处理。生成并注册部署用 SSH 密钥在本地生成一对 SSH 密钥后把公钥注册到 Dokku。在 Dokku 主机上执行dokku ssh-keys:add KEY_NAME path/to/id_rsa.pubKEY_NAME是你为这把密钥起的唯一名称重复使用同一个名称会报错密钥路径必须包含公钥内容且存在于服务器上。也可以直接通过管道传入公钥内容echo $CONTENTS_OF_YOUR_PUBLIC_SSH_KEY_HERE | dokku ssh-keys:add KEY_NAME成功时输出该密钥的指纹例如SHA256:ABC123ABC123abc123abc123Zabc123abcZ123abc以上为文档中的示例输出。两个要点来自 用户管理文档Git 通过 SSH 连接 Dokku 时用户始终是系统用户dokku所以GIT_REMOTE_URL中的用户名写dokkuKEY_NAME中加入admin一词会让该密钥的拥有者获得远程添加其他密钥的权限部署密钥不需要这样做。私钥则稍后配置为 Woodpecker 的 secret。配置 Woodpecker 流水线Dokku 的 Woodpecker CI 文档 给出的最简流水线配置如下其中dokku.me和appname需替换为你的 Dokku 主机域名和应用名when: - event: push branch: main clone: git: image: woodpeckerci/plugin-git settings: partial: false depth: 0 steps: - name: deploy image: dokku/ci-docker-image environment: GIT_REMOTE_URL: ssh://dokkudokku.me:22/appname SSH_PRIVATE_KEY: from_secret: DOKKU_ME_SSH_DEPLOY_KEY commands: - dokku-deploy配置中各部分的作用when只对main分支的 push 事件触发部署。把branch改成你实际推送到 Dokku 的分支。clone标准 clone 阶段被替换为使用woodpeckerci/plugin-git的完整克隆。partial: false、depth: 0表示不做部分克隆也不限制深度——因为 Dokku 会拒绝浅克隆。GIT_REMOTE_URL部署目标格式为ssh://dokkudokku主机:22/应用名。SSH_PRIVATE_KEY通过from_secret指令从 Woodpecker 的 secret 读取。示例中的DOKKU_ME_SSH_DEPLOY_KEY是文档示例使用的 secret 名称你在 Woodpecker 中创建 secret 时名称必须与from_secret的值一致内容为上一步生成的私钥。dokku-deploy官方镜像dokku/ci-docker-image提供的部署命令。根据 通用 CI 集成文档该镜像会自动检测包括 Woodpecker CI 在内的常见 CI 系统注入的环境变量因此只要GIT_REMOTE_URL和SSH_PRIVATE_KEY注入到位即可完成部署。部署分支的对应关系Dokku 默认部署推送到master分支的代码默认deploy-branch为master。如果你的代码仓库用main作为主分支有两种处理方式在流水线的 push 阶段把分支推到master或者在 Dokku 主机上用git:set修改部署分支全局或按应用生效# 全局覆盖所有应用 dokku git:set --global deploy-branch main # 只覆盖某个应用 dokku git:set node-js-app deploy-branch main另外从 0.22.1 起Dokku 会尊重首次推送的分支并自动将其设为deploy-branch值。验证部署结果流水线执行后可以在 Dokku 主机上用git:report查看应用的 git 信息dokku git:report node-js-app输出包含Git sha应用仓库的 HEAD commit SHA和Git last updated at部署分支 ref 最后一次写入的 UNIX 时间戳等字段字段名参见 Git 部署文档。如果 push 后的新提交 SHA 出现在输出中、时间戳更新到最近一次流水线运行时间说明 CI 的推送已经被 Dokku 接收并触发了部署。--format json可用于自动化场景dokku git:report node-js-app --format json限制与边界浅克隆推送不受支持clone阶段必须保持完整克隆depth: 0不要为提速改回默认浅克隆。dokku/ci-docker-image的更多配置示例和用法以该镜像仓库自身的文档为准本文只覆盖 Woodpecker 场景所需的最小配置。SSH 用户名固定为dokku若密钥未注册或私钥 secret 内容错误流水线将无法以 SSH 方式推送到 Dokku。【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表