一种网格间部署流水线
摘要
一篇博客文章,描述了一种自定义的网格间部署流水线,该流水线使用 NATS 连接预发布和生产环境,重点关注可审计性、安全性和环境漂移的修复。
<p><a href="https://lobste.rs/s/xoivjb/inter_mesh_deployment_pipeline">评论</a></p>
查看缓存全文
缓存时间: 2026/08/11 11:10
# 一个网格间部署流水线
Source: https://blog.zm.is/an-inter-mesh-deployment-pipeline/
我处理大规模环境漂移时的经验,以及我为了尝试补救这些问题而发明的东西。
## 一个网格间部署流水线
我有大约 72 个不同的应用,以及两个环境:暂存环境和生产环境。通常的思路是先部署到暂存环境,测试一下,然后再提升到生产环境。但实际上,没有任何工具强制要求这样做,所以这个步骤经常被跳过。随着时间推移,环境逐渐漂移,暂存环境很快就被遗忘,不再作为测试场所。我决定改变这一现状,于是创建了一个连接器,作为两个网格之间的桥,允许生产环境要求暂存环境构建、测试然后交付任何组件。其中一个主要挑战是:要检查两个环境是否配置完全相同,就必须确切知道“应该是什么样”,这让我首先想到用这种方法来部署*新的*应用。毕竟,如果它知道如何成功部署一个新应用,为什么没有这种能力呢?一旦部署完成,就可以从生产环境点击“Pull from staging”来发起更新,这会产生一份完全可审计的日志,随后发生以下事件:
部署可以通过 API/MCP 触发,从而增加一个步骤(如图)。黑色箭头是出站方向,红色箭头是返回路径。
`proc-mesh` 是一个特殊组件,它以非特权方式运行,没有网络,只有一个 Unix 套接字。我决定不编写任何持续以 `root` 身份运行的程序,而是在需要时使用 `doas` 进行经过仔细审计的权限提升,由 `proc-mesh` 调用。其他组件都设置了 `NoNewPrivileges=yes`,所以即使它们想用 `doas`,也无法使用。必须采用分层的安全方法:获得特权的同时会失去网络访问能力。
```
permit nopass xfproc as root cmd /usr/local/sbin/xf-restart-plug
permit nopass xfproc as root cmd /usr/local/sbin/xf-trustbase-verify
# Install a staged artifact: . The bridge owns the # allowlist and derives both the artifact path and the destination itself.
permit nopass xfproc as root cmd /usr/local/sbin/xf-install-binary
```
日志中显示:工件以二进制形式通过 NATS 桥拉取。没有 Git 发布。并且在每个阶段都完全可审计:
既然它知道如何检查现有应用的设置并创建新应用,那么执行批量任务(如让环境重新同步)就变得容易了。每个应用都先暂存、测试,然后再交付到生产环境。
#### 接下来是什么?
你可能已经发现了一个问题:`plug-mesh` 无法部署自身,仍然使用我旧的 Gitea runner 部署路径。我最初针对它自身部署的解决方案是,将一个新的 `plug-mesh` 连接到隔离的网格间 NATS 桥(这不同于主桥——主桥连接一个网格内的所有组件),并在那里使用现有的 `plug-mesh` 组件对其进行测试,然后让新的实例杀死旧的实例,并无缝过渡到主 NATS 网络。理论上,这行得通,但在实践中,我发现自己并不经常修改这个组件,因此觉得没有必要让它能够部署自身。如果我确实要实现这一点,这很可能是更智能部署路径的副作用:该路径采用更严格的测试,在不停止旧组件的情况下暂存新组件,并且需要隔离的 NATS。目前,我们接受暂存环境可能会出问题,而这正是其意义所在。如果暂存一个应用失败了,嗯,至少它不在生产环境上!
相似文章
Derivations to Deployments: Practical Nix in Production
这篇演讲介绍了如何用 Nix 实现从开发环境、构建到云部署的全面可复现性,并展示了 Antithesis 基于 Nix 的“命令集”框架来替代杂乱脚本。
我们编写了一本关于 Agentic DevOps 的开源交互式手册(如何将多智能体系统从本地笔记本迁移到生产环境)
一本开源交互式手册,用于构建 Agentic DevOps 流水线,涵盖多智能体系统的可观测性、基于测试的提示评估、护栏和成本控制。
我的编码代理现在会在合并前将自己的更改部署到沙箱并进行测试
作者介绍了如何使用 Mastra 的新预览部署功能,让编码代理自动将更改部署到沙箱,通过 API 和 UI 进行测试,然后开启 PR,从而弥合了验证缺口。
在沙盒中部署智能体 vs 解耦
本文比较了在云环境中部署 AI 智能体的两种模式:直接在沙盒中部署与解耦组件。文章解释了沙盒方法因云故障而存在的局限性,并重点介绍了 Anthropic 的 Claude Managed Agent 作为解决方案,该方案将会话存储、智能体运行时和沙盒解耦,以提高弹性。
代理环境的安全与维护
一位开发者构建了 Terrarium,这是一个开源沙箱解决方案,用于安全运行多个AI代理,提供隔离世界、反向代理管理和状态回滚功能。