YAML 本身不是用来“执行”运维脚本的语言,而是用来描述配置、流程、编排和参数的。在运维中,YAML 通常用于管理脚本的“输入、结构、调度和关系”,而不是替代 Shell/Python 等脚本语言。
下面从思路 + 常见场景 + 示例三个层面说明。
典型分工:
✅ YAML 是“说明书”,脚本是“工人”
避免把参数写死在脚本里。
deploy.yaml
app:
name: user-service
version: v1.2.0
replicas: 3
env: prod
deploy.sh
APP=$(yq '.app.name' deploy.yaml)
VERSION=$(yq '.app.version' deploy.yaml)
✅ 改 YAML 不改脚本
pipeline.yaml
steps:
- name: build
script: scripts/build.sh
- name: test
script: scripts/test.sh
- name: deploy
script: scripts/deploy.sh
depends_on:
- build
- test
runner.py
for step in yaml.load(steps):
run(step["script"])
✅ 脚本只关心自己,YAML 管流程
hosts.yaml
prod:
hosts:
- 10.0.0.1
- 10.0.0.2
user: deploy
脚本读取后批量执行:
ansible-playbook -i hosts.yaml deploy.yml
GitLab CI 示例
stages:
- build
- test
- deploy
build:
stage: build
script:
- ./scripts/build.sh
deploy:
stage: deploy
script:
- ./scripts/deploy.sh
✅ YAML 定义“什么时候跑什么脚本”
cron.yaml
jobs:
- name: backup
schedule: "0 2 * * *"
command: /opt/scripts/backup.sh
再由一个 daemon 读取并注册 cron。
ops/
├── scripts/
│ ├── deploy.sh
│ ├── backup.sh
├── config/
│ ├── app.yaml
│ ├── hosts.yaml
├── pipelines/
│ └── release.yaml
└── README.md
| 工具 | 作用 |
|---|---|
| Ansible | YAML 描述运维任务 |
| Kubernetes | YAML 管理容器 |
| GitLab CI | YAML 管理 CI |
| yq / jq | 解析 YAML |
| Python + PyYAML | 自研运维系统 |
✅ YAML 只描述稳定结构
✅ 脚本保持单一职责
✅ 用版本控制管理 YAML
✅ 不要写“太复杂的逻辑”进 YAML
✅ 用 schema 校验 YAML(如 kwalify)
如果你愿意,我可以:
你现在的运维脚本是用在什么场景?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。