第一条流水线:不写 YAML 也能跑通
理论说再多不如先跑通一次。这篇给两条路:让 NPC 帮你写,或者自己手写。
路线 A:@CodeBuddy 帮你写(推荐新手)
在仓库里新建一个 Issue,勾选 「替我上班」,然后:
@CodeBuddy 帮我在 main 分支配置一条流水线:当代码 push 时输出 "hello world"
它会替你做三件事:在根目录生成 .cnb.yml、提交推送、把执行结果回报到评论里。
然后去 云原生构建 标签页看这一条 push 触发的构建,点开看日志。
路线 B:手写,其实只有 7 行
.cnb.yml
main:
push:
- stages:
- name: hello
script: echo "hello world"
逐层拆:
| 行 | 层级 | 含义 |
|---|---|---|
main: | 触发分支 | 只在 main 分支生效 |
push: | 触发事件 | 有代码推上来就触发 |
- stages: | 流水线 | 这里的 - 表示一条 pipeline,可有多条,多条并发执行 |
- name/script: | 任务 | 在容器里跑一条命令 |
提交推送:
git add .cnb.yml
git commit -m "ci: add hello pipeline"
git push origin main
两个立刻会遇到的问题
一、为什么用了 node 的包却找不到 node?
流水线默认跑在一个 Docker 容器里,容器里有什么取决于你指定的镜像。不指定就是平台的缺省镜像,不一定有 node、python、mvn。
.cnb.yml
main:
push:
- docker:
image: node:22
stages:
- name: node version
script: node -v
二、失败之后想通知别人怎么办
.cnb.yml
main:
pull_request:
- stages:
- name: lint
script: echo "lint..."
- name: test
script: echo "test..."
failStages:
- name: notify
script: echo "PR 检查失败,通知群里!"
failStages 只在前面任一 stage 失败时执行,这是最省事的告警写法。
语法提示一定要配
.cnb.yml 是目前唯一需要手写的东西,别用记事本硬写。用云原生开发环境打开,原生支持补全和校验;本地 VS Code 装 redhat.vscode-yaml 插件,并在 settings.json 里挂 schema:
{
"yaml.schemas": {
"https://docs.cnb.cool/conf-schema-zh.json": ".cnb.yml"
}
}
跑通之后
你已经完成了 CI/CD 的最小闭环:代码变更 → 自动执行 → 看到结果。
后面的篇章,基本上都是在这 7 行上做加法:换镜像、加事件、加环境变量、加缓存、加速。