如何用Openship API+CI编写完整发布流程:自动化运维脚本实战指南
2026/9/1 14:17:20 网站建设 项目流程

如何用Openship API+CI编写完整发布流程:自动化运维脚本实战指南

【免费下载链接】openshipSelf-hosted deployment platform项目地址: https://gitcode.com/GitHub_Trending/ope/openship

Openship是一个开源的自托管部署平台(Self-hosted deployment platform),内置 CI/CD 能力:指向一个代码仓库,它就能自动构建、发布、路由并处理 TLS 证书。本文带你用Openship API + CI编写一套完整的自动化发布流程,从触发部署、轮询状态到失败自动回滚,全部通过运维脚本实现,适合新手快速上手自动化运维。


一、快速了解 Openship:一条命令启动部署平台

Openship 支持三种运行方式,本文的 CI 场景推荐自托管服务器模式(团队 / 需要 push-to-deploy 时使用):

curl -fsSL https://get.openship.io | sh # 安装 CLI(自带 API + 仪表盘) openship up # 以后台服务方式安装并启动

在 Linux + Docker 环境下会自动进入Compose 模式,一键拉起 Postgres、Redis、API、仪表盘和 OpenResty 边缘代理(:80/:443),并自动完成域名与 Let's Encrypt TLS。核心概念与安装细节可参考官方文档目录:docs/installation.md。


二、API 鉴权:为 CI 脚本签发 Token

CI 脚本调用 API 的第一步是获得身份凭证。Openship 的 API 挂载在/api路径下,每个路由都声明了权限标签并由安全路由器统一强制执行,你可以直接阅读路由定义了解权限模型:

  • 部署路由定义:apps/api/src/modules/deployments/deployment.routes.ts
  • Token 模块源码:apps/api/src/modules/tokens/

在 CI 中只需:

  1. 在仪表盘创建一枚Personal Access Token(PAT)
  2. 将其存入 CI 的加密变量(如OPENSHIP_TOKEN);
  3. 脚本中通过Authorization: Bearer <token>头携带凭证。

💡小贴士:支持项目级作用域的 Token 更适合 CI——只授予目标项目的deployment:write权限即可,权限最小化是自动化运维的安全底线。


三、核心 API 端点清单:发布流程的“动词”表

编写发布脚本前,先认识这几个关键端点(前缀均为https://<你的Openship地址>/api):

用途方法 + 路径说明
🚀 触发部署POST /deployments传入projectId/branch/commitSha,立即返回deployment_id
📡 实时状态流GET /deployments/:id/streamSSE 推送构建进度与日志
🔍 查询构建状态GET /deployments/:id/build当前步骤、各服务状态、是否被阻塞等待决策
⏸️ 处理阻塞项GET /deployments/:id/pending端口冲突等阻塞点会列出可执行动作(如free_port
📝 拉取日志GET /deployments/:id/logs构建/运行日志
⏪ 回滚POST /deployments/:id/rollback回退到指定部署的镜像或提交
🗑️ 取消POST /deployments/:id/cancel取消进行中的部署
💓 健康检查GET /api/health用于 CI 前置检查平台可用性

这些端点的完整实现(含 MCP 描述与权限标注)见:deployment.routes.ts。


四、CI 发布脚本实战:触发 → 轮询 → 回滚

下面是一个最小但完整的生产发布脚本思路(bash + curl),核心是三步状态机

第 1 步:触发部署

curl -s -X POST "$OPENSHIP_URL/api/deployments" \ -H "Authorization: Bearer $OPENSHIP_TOKEN" \ -H "Content-Type: application/json" \ -d '{"projectId":"<项目ID>","branch":"main"}' # 响应 202:{ "data": { "deployment_id": "xxx", "project_id": "yyy" } }

第 2 步:轮询直到终态

每隔几秒调用GET /deployments/:id/build,读取状态与pendingPrompt字段:

  • pendingPrompt非空 → 部署被阻塞(如端口占用),脚本可从actions[].id读出可选动作并自动应答,避免人工值守;
  • 状态变为成功 → 发布完成,可继续执行冒烟测试;
  • 状态变为失败 → 进入第 3 步。

第 3 步:失败自动回滚

curl -s -X POST "$OPENSHIP_URL/api/deployments/$GOOD_DEPLOY_ID/rollback" \ -H "Authorization: Bearer $OPENSHIP_TOKEN"

回滚会优先使用保留的历史镜像(秒级生效),否则从历史提交重建——这个策略可通过GET /:id/restore-plan提前查询:回滚窗口实现。

⚠️注意:不要猜pendingPrompt的 action id,务必从状态接口返回值中读取,否则部署会在超时后自动放弃。

CLI 也可以直接驱动同一套 API——openship api命令就像gh api一样提供任意路由的鉴权直连,调试脚本时非常好用:

openship api /deployments -X POST -d '{"projectId":"<项目ID>"}'

实现见:apps/cli/src/commands/api.ts。


五、进阶:让发布流程更聪明

  • 智能路由(Smart Route):只重建自上次部署以来发生变化的服务,后端改动不会重启有状态的前端服务。CLI 侧对应--smart-route参数:deploy.ts。
  • 预览环境:触发部署时传environment: "preview",分支代码可发布到独立预览环境验证后再进生产。
  • Webhook 通知:结合 incoming-webhooks 模块,部署完成后可自动推送通知到你的 IM / 邮件,实现"发布状态零人工查询"。
  • 监控与告警:发布脚本建议同时调用 health 模块 做发布前体检,确认平台、边缘代理与数据库均在线再开始发布。

六、总结:你的第一条自动化发布流水线

步骤关键动作对应能力
1️⃣openship up启动自托管平台Compose 模式,自动域名 + TLS
2️⃣仪表盘签发项目级 Token权限最小化
3️⃣POST /api/deployments触发发布秒级返回部署 ID
4️⃣轮询/:id/build+ 处理pendingPrompt无人值守自动决策
5️⃣失败时POST /:id/rollback镜像秒级回滚
6️⃣Webhook 推送发布结果状态同步到团队

这套"触发 → 观察 → 决策 → 回滚"的闭环,就是基于Openship API + CI的完整发布流程。相比自建流水线,你不需要自己维护构建机、镜像仓库和证书续期——把仓库指给它,剩下的交给脚本。想深入了解架构细节,可以阅读 docs/oblien-edge-routing-requirements.md 与监控指南 docs/monitoring.md。

【免费下载链接】openshipSelf-hosted deployment platform项目地址: https://gitcode.com/GitHub_Trending/ope/openship

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询