动态设置自动管道的参数值

Adn*_*man 6 continuous-integration azure-devops azure-pipelines

如果我创建一个参数,我可以在手动运行管道时设置其值。但是当管道自动运行时,它使用默认值。当管道自动运行时(例如响应推送到存储库)是否有任何方法可以向其传递参数值?

这是我正在使用的 yaml 文件。目标是能够控制在管道中运行哪些测试。

parameters:
  - name: testFiles
    type: string
    default: cypress/integration/first.spec.js

trigger:
  - azure-test

pool:
  vmImage: ubuntu-latest

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: "10.x"
    displayName: "Install Node.js"

  - script: npm install
    displayName: "npm install"

  - script: npx cypress run --record --key [record key removed] --spec ${{ parameters.testFiles }}
    displayName: "run cypress"
Run Code Online (Sandbox Code Playgroud)

Kev*_*SFT 6

当管道自动运行时(例如响应推送到存储库)是否有任何方法可以向其传递参数值?

运行自动管道时,只会使用默认参数值。

所以我们可以通过改变参数的默认值来实现这个需求。

根据我的测试,我找到了一个方便的方法:可以使用If表达式来检查触发方法(手动或CI)。然后就可以设置参数的值了。

注意:我们在定义参数时不能使用if表达式,所以需要使用变量来传递值。

你可以参考这张票

这是我的例子:

trigger:
- master


variables:
   ${{ if eq( variables['Build.Reason'], 'IndividualCI' ) }}: 
    buildVersion: $(BUILD.SOURCEVERSIONMESSAGE)
   ${{ if ne( variables['Build.Reason'], 'IndividualCI' ) }}: 
    buildVersion: cypress/integration/first.spec.js

parameters:
  - name: testFiles
    type: string  
    default: $(buildVersion)


pool:
  vmImage: ubuntu-latest

steps:
- script: echo ${{ parameters.testFiles }}
  displayName: 'Run a one-line script'
Run Code Online (Sandbox Code Playgroud)

该变量$(Build.Reason)用于确认触发方式。

该变量$(BUILD.SOURCEVERSIONMESSAGE)包含提交的消息。

步骤如下:

  1. 当您将更改推送到存储库中时,您需要添加评论。注释是测试文件路径。

在此输入图像描述

  1. CI 触发的管道将获取此注释并将其设置为参数默认值。

在此输入图像描述

在这种情况下,类似于手动运行管道来设置参数值。

当您手动运行管道时,它将使用定义的默认值。您还可以在手动运行管道时修改该值。

在此输入图像描述