Azure Pipeline:PR合并至master前验证YAML文件并调用API
YAML语法验证与API提交的PR合并流程
核心逻辑
每次更新YAML文件后推送到feature/{filename.yaml}分支并发起PR到master时,自动执行以下流程:
- 校验目标YAML文件的语法合法性,不合法则直接终止流程并阻止合并
- 语法校验通过后,将文件内容提交到指定API端点
- API提交成功后,允许PR合并
具体实现(以GitHub Actions为例)
在仓库根目录创建.github/workflows/yaml-validation-api.yml,配置内容如下:
name: YAML Validation & API Submission on: pull_request: branches: [master] paths: ['**.yaml'] # 仅监听YAML文件相关的PR jobs: validate-and-submit: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取完整历史以对比分支差异 - name: 获取PR中修改的YAML文件 id: get-target-file run: | # 提取PR中唯一修改的YAML文件(假设单PR仅改一个文件) TARGET_FILE=$(git diff --name-only origin/master HEAD | grep '\.yaml$') echo "file=$TARGET_FILE" >> $GITHUB_OUTPUT - name: 验证YAML语法合法性 run: | # 方式1:用yamllint做语法+格式校验(需提前安装) sudo apt update && sudo apt install -y yamllint yamllint ${{ steps.get-target-file.outputs.file }} # 方式2:用Python yaml模块仅做语法校验(更轻量) # python3 -c "import yaml; yaml.safe_load(open('${{ steps.get-target-file.outputs.file }}'))" - name: 将YAML内容提交到API run: | # 读取文件内容并发送请求 YAML_CONTENT=$(cat ${{ steps.get-target-file.outputs.file }}) curl -X POST \ -H "Content-Type: application/yaml" \ -d "$YAML_CONTENT" \ https://your-api-endpoint.com/submit # 替换为实际API地址 # 若API需要认证,添加Header:-H "Authorization: Bearer ${{ secrets.API_TOKEN }}" - name: 标记流程完成 run: echo "YAML校验通过,API提交完成,PR可合并"
关键配置说明
- 触发规则:仅当PR针对master分支且修改了YAML文件时触发Workflow
- 语法校验:两种方式可选,
yamllint能同时检查格式规范,Python yaml模块仅做基础语法验证 - API提交:根据实际API要求调整请求方法、Content-Type和认证方式,敏感凭证(如Token)要存在仓库Secrets中
- 阻止合并:在仓库设置中开启"Require status checks to pass before merging",将该Workflow设为必填检查项,失败时直接阻止PR合并
注意事项
- 若需要支持单PR修改多个YAML文件,需修改
get-target-file步骤,循环处理每个修改的文件 - 提前测试API在CI环境的连通性,避免因网络或权限问题导致流程失败
- 确保
feature/{filename.yaml}分支命名规则稳定,避免文件路径识别出错
内容的提问来源于stack exchange,提问作者user20350110
相关产品推荐
相关产品推荐

