本地和 CI 跑同一个文件:我写了个 YAML 工作流引擎 OrchStep,求各位拍砖

先自报家门:我是 OrchStep 的作者,这篇是分享 + 求反馈,不是软广,欢迎轻喷。

做运维 / CI 自动化时,我一直被两件事折磨:

  1. 一堆 bash 脚本重型 CI 平台之间是断层——脚本太散,平台太重;
  2. 流水线只能在 runner 里复现,本地改一行就得 push 一次,“push and pray”。

于是我做了 OrchStep:一个 YAML 优先的工作流引擎,核心目标是——同一个 orchstep.yml,在你本地和在 CI 里跑出来一模一样

  • 项目地址:https://github.com/orchstep/orchstep
  • 文档官网:https://orchstep.dev

📚 想上手别只看这篇:官网 https://orchstep.dev 上有大量可运行示例、从零开始的教程,以及面向生产环境的详细分步指南(step-by-step)——环境管理、模块复用、CI 集成、密钥处理、可视化排障等都有成体系的文档,基本照着做就能落地到生产。

几个我自己天天在用的特性

  • 本地 = CI:同一份工作流,本地直接 orchstep run,和 CI 行为一致,先在本地调通再推。
  • 作用域环境变量(scoped env):被调用任务的 env / dotenv 在返回时自动回收,staging 的密钥不会泄漏到后面的 prod 步骤。
  • 可复用模块(modules):版本化、Git 分发;还能作为**“配置化实例”**运行——每个服务带上自己的 per-environment 配置,一个 --env 就能让整个服务集群各自加载自己的 profile。
  • orchstep do:把任意一次性命令,带上项目里已经解析好的变量 / 环境跑起来(相当于一个"懂上下文的 envsubst")。
  • 可视化 dry-run + 本地 dashboard:先看执行计划图,再跑;本地还有个 web 面板看实时执行和历史。
  • 签名发布:每个 release 带 cosign 签名 + SBOM;安装支持 brew / npm / pip / docker

一眼看懂的例子

同一份文件,本地和 CI 跑的都是它:

# orchstep.yml
name: ci
tasks:
  test:
    dir: backend           # 这个任务的命令都在 ./backend 下执行
    steps:
      - { name: unit, func: shell, do: go test ./... }
      - name: build
        func: shell
        do: docker build -t app:{{ vars.version }} .

一次性命令也能直接带上环境上下文:

# {{ vars.image }} 会用 prod 环境的值渲染后再执行
orchstep do --env prod 'kubectl set image deploy/app app={{ vars.image }}'

# 拿不准?先 --render 看看渲染结果,不执行
orchstep do --render --env prod 'helm upgrade app --set tag={{ vars.version }}'

上面只是最小示例。更完整的生产级用法(多环境、模块化、CI/CD 集成、密钥与审计),官网都有手把手的分步教程和成套示例:https://orchstep.dev

我知道这赛道很卷,所以想听听大家的真实想法

GitHub Actions、Dagger、Task、Earthly…… 工具不少,我也不打算取代谁的 Jenkins。我更想知道:

  • “本地和 CI 跑得一致”,对你来说是真痛点,还是你那边已经解决了?
  • 相比你现在用的东西,OrchStep 这套在哪里会掉链子?
  • 下一步我在纠结几个方向(跨 Agent 适配、更强的策略 / 审计能力),你会希望先有哪个才敢在生产里用?

欢迎直接拍砖,骂得越具体我越感激 🙏

对此工具怎样帮我们使用Token费降9成感兴趣,请留言,我会再开一篇专门讲一下


  • ⭐ GitHub:https://github.com/orchstep/orchstep
  • 📖 文档 / 示例 / 生产级分步教程:https://orchstep.dev(大量可运行示例 + step-by-step 教程,建议照着做)
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐