Azure DevOps YAML流水线:从PR手动触发Dev部署且不阻塞合并
实现Azure DevOps PR手动触发Dev部署且不阻塞合并的方案
针对你的需求,推荐两种可行的实现方式,均能满足PR检查必填、手动触发PR部署不阻塞合并、master提交自动部署的要求:
方案一:拆分流水线为「PR检查」和「PR手动部署」两个独立流水线
将检查逻辑和部署逻辑拆分到两个流水线,通过分支策略控制必填项,用户可在PR页面手动触发部署流水线:
1. PR检查流水线(必填分支策略)
这个流水线仅负责静态分析和测试,设置为master分支的必填PR检查,自动触发且仅执行检查阶段:
trigger: none pr: branches: include: - master stages: - stage: PR_Check jobs: - job: Static_Analysis_Tests steps: - script: # 替换为你的静态分析命令 - script: # 替换为你的测试运行命令
在分支策略中,将此流水线设置为必填项,确保PR只有通过检查才能合并。
2. PR手动部署流水线(可选手动触发)
这个流水线仅用于从PR手动部署到Dev,不设为分支策略必填项:
trigger: none pr: branches: include: - master trigger: none # 禁止自动触发,仅允许手动启动 stages: - stage: Deploy_Dev_From_PR condition: eq(variables['Build.Reason'], 'Manual') jobs: - job: Deploy steps: - script: # 替换为你的Dev环境部署命令 # 可添加环境变量设置、基础设施部署等任务
用户在PR页面的「流水线」标签中,可手动选择并运行这个部署流水线,基于当前PR的代码部署到Dev,该操作不会影响PR的合并状态。
3. Master分支自动部署
在PR检查流水线或单独的master部署流水线中,添加master分支触发的部署逻辑:
trigger: branches: include: - master stages: - stage: Deploy_Dev_Master jobs: - job: Deploy steps: - script: # 替换为你的Dev环境部署命令
方案二:单流水线内通过参数+阶段条件控制(无需拆分流水线)
在同一个流水线中添加布尔参数,配合分支策略的阶段筛选,实现检查必过、部署可选触发:
1. 流水线YAML配置
添加DeployDevFromPR参数,默认关闭,PR检查阶段始终执行,部署阶段仅在参数开启或master分支触发时执行:
parameters: - name: DeployDevFromPR type: boolean default: false trigger: branches: include: - master pr: branches: include: - master stages: - stage: PR_Check displayName: PR静态分析与测试 jobs: - job: Run_Checks steps: - script: # 静态分析命令 - script: # 测试运行命令 - stage: Deploy_Dev displayName: 部署到Dev环境 condition: | or( eq(variables['Build.SourceBranchName'], 'master'), eq(${{ parameters.DeployDevFromPR }}, true) ) jobs: - job: Deploy steps: - script: # Dev部署命令
2. 分支策略设置
在master分支的PR必填检查中,点击「高级」选项,选择「仅特定阶段」,只勾选PR_Check阶段。这样即使部署阶段未执行或失败,PR的必填检查依然会标记为通过,不阻塞合并。
3. 手动触发部署
用户在PR页面重新运行流水线时,可手动将DeployDevFromPR参数改为true,触发部署阶段,基于PR代码部署到Dev环境。
关键优势
两种方案均满足你的场景需求:
- 普通代码修改:PR检查通过即可直接合并
- 需要环境验证的修改:手动触发PR部署,提前验证问题,不影响PR合并流程
- 合并到master后,自动触发Dev环境部署
内容的提问来源于stack exchange,提问作者Patrik Valkovič
相关产品推荐
相关产品推荐

