Azure 如何在模板中使用管道内部创建的变量(从gradle.properties文件)作为任务

Azure 如何在模板中使用管道内部创建的变量(从gradle.properties文件)作为任务,azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,我有一个java项目,其中包含gradle.properties文件。Im将gradle.properties中定义的变量提取为 ##vso[task.setvariable variable=myVariable;]`my script to extract it from gradle.properties` 然后,我使用另一个存储库中的模板,该存储库需要该变量,但我不能在任务中使用它,但当我尝试在-script:echo$variable中使用它作为步骤而不是任务时,它正在工作。 当我尝

我有一个java项目,其中包含gradle.properties文件。Im将gradle.properties中定义的变量提取为

##vso[task.setvariable variable=myVariable;]`my script to extract it from gradle.properties`
然后,我使用另一个存储库中的模板,该存储库需要该变量,但我不能在任务中使用它,但当我尝试在
-script:echo$variable
中使用它作为步骤而不是任务时,它正在工作。 当我尝试在任务中使用它时,它将变量视为$variable而不是值


也许有更好的方法将变量提取到azure管道,而不是使用这种方法?

可能您不向模板提供变量

使用提供的参数执行模板的示例

- template: my/path/to/myTemplate.yml@MyAnotherRepositoryResourceName
  parameters:
    projectsToBeTested: $(someVariable)
和示例模板接受参数

steps:
- task: DotNetCoreCLI@2
  displayName: 'Just testing'
  inputs:
    command: test
    projects: ${{ parameters.projectsToBeTested}}
如果没有帮助,请提供更多信息。

代码如下所示:

pipeline.yml

pool:
  vmImage: ubuntu-20.04

resources:
  repositories:
  - repository: common
    type: git
    name: organisation/repo-name

stages:
- stage: "Build"
  jobs:
  - job: "Build"
    steps:
    - bash: |
      echo "##vso[task.setvariable variable=parampass]anything"
    - template: templatename.yml@common
      parameters:
        par1: $(parampass)
pool:
  vmImage: ubuntu-20.04

resources:
  repositories:
  - repository: common
    type: git
    name: organisation/repo-name

variables:
  - name: parampass
    value: xxx

stages:
- stage: "Build"
  jobs:
  - job: "Build"
    steps:
    - template: templatename.yml@common
      parameters:
        par1: ${{ variables.parampass}}
    
templatename.yml

parameters:
- name: par1

steps:
- task: SonarCloudPrepare@1
  displayName: SonarCloud analysis prepare
  inputs:
    SonarCloud: ${{ parameters.par1}}
    organization: 'orgname'
    scannerMode: 'Other'
    extraProperties: |
      # Additional properties that will be passed to the scanner,
      # Put one key=value per line, example:
      # sonar.exclusions=**/*.bin
      sonar.projectKey= # same param pass case
      sonar.projectName= # same param pass case

通常,不管是否传递了参数,或者是否将模板当作管道代码的一部分来使用,这都无关紧要。无法找到输出总是$(parampass)或smth检查错误消息:

我们在管道运行bash任务之前得到错误,因为它无法创建变量
parampass
,我们得到的参数值是$(parampass),而不是变量值

选中此项:

  • 在管道中,模板表达式变量
    ${{variables.var}}
    在编译时在运行时开始之前得到处理。宏语法变量
    $(var)
    在任务运行之前在运行时处理。运行时表达式
    $[variables.var]
    也会在运行时进行处理,但设计用于条件和表达式
作为解决办法:

pipeline.yml

pool:
  vmImage: ubuntu-20.04

resources:
  repositories:
  - repository: common
    type: git
    name: organisation/repo-name

stages:
- stage: "Build"
  jobs:
  - job: "Build"
    steps:
    - bash: |
      echo "##vso[task.setvariable variable=parampass]anything"
    - template: templatename.yml@common
      parameters:
        par1: $(parampass)
pool:
  vmImage: ubuntu-20.04

resources:
  repositories:
  - repository: common
    type: git
    name: organisation/repo-name

variables:
  - name: parampass
    value: xxx

stages:
- stage: "Build"
  jobs:
  - job: "Build"
    steps:
    - template: templatename.yml@common
      parameters:
        par1: ${{ variables.parampass}}
    
结果:


谢谢您的回答,但不管我是否按参数提供变量,它仍然将其视为$(变量)。您可以提供代码或屏幕截图吗?您好,您可以打印变量,但不能在任务中使用它,对吗?您可以在这里随意分享您的管道定义,我们可以检查它并找到问题所在。谢谢,只是想看看这个问题现在是否还在阻碍你?对这个问题有任何更新吗?是的,你是对的-只是在下面上传了我的代码,它与以前不一样,因为我同时对它进行了重构,但想法是sameHi@Yoza,这是设计的,请检查我的答案,如果你有任何问题,欢迎在这里分享嗨,这个问题怎么样?下面的答案解决了你的问题吗?如果没有,你能告诉我关于这个问题的最新信息吗?