Azure 如何在模板中使用管道内部创建的变量(从gradle.properties文件)作为任务
我有一个java项目,其中包含gradle.properties文件。Im将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中使用它作为步骤而不是任务时,它正在工作。 当我尝
##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]
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,这是设计的,请检查我的答案,如果你有任何问题,欢迎在这里分享嗨,这个问题怎么样?下面的答案解决了你的问题吗?如果没有,你能告诉我关于这个问题的最新信息吗?