一句话先给你结论:
.gitlab-ci.yml这个 YAML 文件,是给 GitLab Server 用的。
更精确一点拆开说👇
一、YAML 文件的使用者是谁?
✅ 第一使用者:GitLab Server(GitLab 本身)
当你:
git push- 提 Merge Request
- 手动点 “Run pipeline”
GitLab Server 会:
- 读取你仓库根目录下的
.gitlab-ci.yml - 解析里面的 stages / jobs / rules
- 决定:
- 要跑哪些 Job
- Job 属于哪个 Stage
- Job 需要哪些 Runner(通过
tags) - Job 成功/失败条件
📌 GitLab Server 自己不跑命令,只负责“看懂 YAML + 派活”。
✅ 第二使用者:GitLab Runner(真正干活的人)
GitLab Server 把 Job 派给 Runner 后:
- Runner 下载你的代码
- Runner 进入 Job 指定的环境
- Runner 执行
script:里的命令 - Runner 把结果(log / artifacts)回传给 GitLab
所以:
- YAML 是 GitLab 读的
- 命令是 Runner 执行的
二、用你现在的 UVM 场景画一张“谁用 YAML”的图
你 git push│▼
GitLab Server(内网)│ 1️⃣ 读 .gitlab-ci.yml│ 2️⃣ 解析 stages/jobs/tags│ 3️⃣ 派 Job 给 Runner▼
GitLab Runner(装在 EDA 服务器上)│ 4️⃣ source EDA 环境│ 5️⃣ 跑 vcs / questa / regress.py▼
仿真完成 → 日志/覆盖率 → 回传给 GitLab
📌 YAML 从来不“自己跑”,它只是“施工图纸”。
三、常见误解澄清(非常关键)
❌ 误解 1:YAML 是给 Runner 读的
✅ 错
👉 Runner 只执行命令,不直接解析 YAML
❌ 误解 2:YAML 是给 Bash 用的
✅ 错
👉 Bash 只执行 script: 里的内容
❌ 误解 3:YAML 可以跑仿真
✅ 错
👉 YAML 描述“要跑什么”,仿真由 EDA 工具跑
四、为什么 GitLab 一定要用 YAML?
因为:
- 结构清晰(stages / jobs)
- 易版本控制(和代码一起存在 Git)
- 易审计(谁改了流水线,一眼可见)
- 易复用(include / extends)
对比:
| 方式 | 缺点 |
|---|---|
| Shell 脚本 | 看不见状态、不好可视化 |
| Makefile | 不适合分布式调度 |
| Jenkinsfile | 复杂、学习成本高 |
| ✅ GitLab CI YAML | 正好适合 Git + CI |
五、在你这个环境里的“人话版”总结
.gitlab-ci.yml是写给 GitLab 看的说明书
GitLab 看完后,指挥 Runner 去 EDA 服务器上 source 环境 → 跑仿真 → 收 log
六、下一步你可以验证这句话
在 GitLab UI 里:
Project → Build → Pipelines → 点一个 Pipeline → Jobs
你会发现:
- 每一个 Job = YAML 里的一个 job
- Job 的顺序 = stages 的顺序
- Job 跑在哪 = tags 对应的 Runner
如果你愿意,我可以帮你 对着你现在的 .gitlab-ci.yml 一行一行标出来:哪句是给 GitLab 看的,哪句是给 Runner 跑的,这样以后你改 YAML 就不会再“盲改”。
