在结帐时选择特定分行或识别已结账的分行

问题描述 投票:0回答:1

我们正在使用带有角色、模板、中央存储库等的 ansible 设置来进行部署。 并正在致力于创建一个新的部署管道,其中需要针对每个环境修复 1 个相关存储库的源分支。 即 master_D 代表 DEV,master_T 代表 TST env,等等

用户通过 UI 触发部署管道时选择一个环境。

环境被翻译为分支名称:

variables:
- name: Branch
  ${{ if eq(parameters['Environment'], 'DEV') }}:
    value: master_D

分支名称在存储库定义中使用:

resources:
  repositories:
    - repository: SourceCode
      type: git
      name: Repos/SourceCode
      ref: $(Branch)

在通用构建模板中,检出存储库以进行进一步处理:

stages:
  - stage: 'Build_ansible_playbook'
    displayName: 'Build ansible playbook'
    jobs:
      - job: 'Build_ansible_playbook'
        pool: 'Azure Pipelines'
        steps:
          - checkout: SourceCode
            fetchDepth: 1
            clean: true
            displayName: Checkout SourceCode inventories

这个效果很好。差不多了。

我面临的问题是,在用户界面中有一个“资源”菜单,用户可以在其中为每个涉及的存储库选择一个版本。所以基本上,用户(我们有大约 200 个用户)能够为存储库“SourceCode”选择不同的分支,这将简单地覆盖管道的分支设置。

我正在努力阻止这种情况发生。思路:

  • 修改“签出”步骤以专门签出预定义分支,或者

  • 捕获已签出分支的分支名称(并在继续执行剧本之前验证它)

我对这两件事的运气都是零。 checkout 似乎没有任何分支命名选项,并且不支持开箱即用地捕获实际签出的存储库的分支名称。任何帮助将不胜感激!

ansible branch repo
1个回答
0
投票

经过长时间的搜索和无数次无结果的尝试将运行时变量传递给模板,我终于找到了一个可行的解决方案

部署管道中定义的其他变量以捕获实际使用的分支:

- name: RefActual
  value: $[ resources.repositories.SourceCode.ref ]
- name: BranchActual
  value: $[replace(variables.RefActual, 'refs/heads/', '')]

将提到的通用构建模板保留原样。并接受这样一个事实:如果用户覆盖分支设置,将会生成不正确的构建。

Branch 和 BranchActual 被传递到部署阶段剧本(在我们的例子中,通过参数集,因为它首先通过通用部署模板路由),并且添加了一个 bash 任务来执行检查:

 - bash: |
      echo "Expected Branch: ${{ parameters.ParamSet.Branch }}"
      echo "Actual Branch: ${{ parameters.ParamSet.BranchActual }}"
      if [ ${{ parameters.ParamSet.Branch }} = ${{ parameters.ParamSet.BranchActual }} ]; then
        echo "Branch verified"
      else
        echo "Branch mismatch detected"
        exit 1
      fi
© www.soinside.com 2019 - 2024. All rights reserved.