【问题标题】:Display selection list for user input显示用户输入的选择列表
【发布时间】:2020-12-07 12:21:04
【问题描述】:

我们使用的是经典管道(不是 YAML)。我们的代码库包含 SSIS 包的 Visual Studio 项目。目前每个 repo 只包含一个 SSIS 包,因此当您进行构建时,使用预定义变量从包中创建构建工件。我们的愿望是允许人们在一个 repo(基于项目)中拥有多个 SSIS 包,然后在进行管道构建时选择要构建和发布的包。

我的首选解决方案是:

  1. 执行构建时,PowerShell 脚本会枚举 SSIS 包以填充变量。
  2. SSIS 包名称显示为复选框,允许用户选择要包含在构建中的包。
  3. 构建工件是使用选定的 SSIS 包创建的。

如果 DevOps Pipelines 无法做到这一点,我会选择这个替代解决方案:

  1. 创建(或编辑)DevOps Pipeline 时,用户会在其存储库中使用 SSIS 包名称列表填充变量。
  2. 执行构建时,SSIS 包名称显示为复选框,允许用户选择要包含在构建中的包。
  3. 构建工件是使用选定的 SSIS 包创建的。

我想重申一下,我们已经有工作流水线来创建用于从 SSIS 包发布的工件。所以我不是从头开始,我只是想修改我们的流程以从一个组中构建和发布选定的 SSIS 包。我花了很多时间在文档和帮助论坛中挖掘,但还没有找到一种方法来做到这一点。我很乐意听取专家们关于 SO 的任何建议。

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    恐怕上述首选解决方案是不可能的。因为在构建的执行过程中没有办法显示一个复选框来允许用户选择构建哪些包。

    但是,在创建(或编辑)DevOps 管道时填充变量是可以实现的。见下文:

    1、在变量选项卡中创建变量(检查Settable at queue time

    2,在您的管道中添加多个构建任务,每个包一个。使用customized condition 来决定应该构建哪个包。见下文:

    选择自定义条件-->输入条件表达式and(succeeded(), eq(variables.APackageOne, true))

    3,当使用管道队列时,他应该修改变量值以选择应该构建哪些包:

    对于上述情况,使用 yaml 管道和runtime parameters 会更好。

    1,您可以为每个包定义多个运行时参数作为标志。并使用条件根据选择的参数用途来决定应该构建哪个包。见下文:

    parameters:
    - name: Package One
      type: boolean
      default: false
    - name: PackageTwo
      type: boolean
      default: false
    - name: PackageThree
      type: boolean
      default: false
    - name: PackageFour
      type: boolean
      default: false
    

    如果在您的 yaml 管道中定义了上述参数。当用户对管道进行排队时,您可以选择包。见下文:

    然后使用自定义条件只构建选定的包:

    - task: VSBuild@1
      name: BuildPackageOne
      inputs:
        ...
      condition: and(succeeded(), eq('${{ parameters.PackageOne }}', true))
    

    【讨论】:

    • 这也是我所看到的,如果您使用 YAML,这一切似乎更容易。不幸的是,我们已经有几十个使用经典方法的管道。但是感谢您的出色回答!我很高兴知道我们的选择。
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多