我的ci_pipeline.yml包含以下內容:
- stage: DeployDEV
pool:
vmImage: 'windows-latest'
variables:
- group: [REDACTED]
- name: test_var
value: firstval
jobs:
- job: BuildDeploy
displayName: "REDACTED"
steps:
- script: echo "test_var = $(test_var)"
displayName: first variable pass
- bash: echo "##vso[task.setvariable variable=test_var]secondValue"
displayName: set new variable value
- script: echo "test_var = $(test_var)"
displayName: second variable pass
name: Env
displayName: "Extract Source Branch Name"
- template: pipeline_templates/ci_pipeline_templates/build_deploy_dev.yml
parameters:
testvar: $(test_var)
并在build_deploy_dev.yml模板中:
parameters:
- name: testvar
jobs:
- job: Test
displayName: "Testjob"
steps:
- script: echo "test_var=${{ parameters.testvar }}"
name: TestVar
displayName: 'test'
我需要能夠在將主 yml 檔案中的變數傳遞給模板之前對其進行修改。但是,test_var仍然保持為firstval. 我究竟做錯了什么?似乎更改在主 yml 檔案中是成功的。第二個變數傳遞腳本顯示test_var=secondValue。如何使更改成為永久性更改,以便模板可以擁有它?
uj5u.com熱心網友回復:
如上所述:引數在編譯時進行評估。因此,使用引數不會解決您的問題,但是您可以創建一個新變數作為輸出并使您的模板作業依賴于之后生成新變數的作業,您可以在模板中使用它,如下所示:
ci_pipeline.yml
- stage: DeployDEV
pool:
vmImage: 'windows-latest'
variables:
- group: [REDACTED]
- name: test_var
value: firstval
jobs:
- job: BuildDeploy
displayName: "REDACTED"
steps:
- script: echo "test_var = $(test_var)"
displayName: first variable pass
- bash: echo "##vso[task.setvariable variable=new_var;isOutput=true]SomeValue"
displayName: set new variable value
name: SetMyVariable
name: Env
displayName: "Extract Source Branch Name"
- template: pipeline_templates/ci_pipeline_templates/build_deploy_dev.yml
然后在您的build_deploy_dev.yml中,您可以使用之前創建的變數:
jobs:
- job: Test
variables:
test_var: $[ dependencies.BuildDeploy.outputs['SetMyVariable.new_var'] ]
displayName: "Testjob"
dependsOn: BuildDeploy
steps:
- script: echo "test_var=$(test_var)"
name: TestVar
displayName: 'test'
請注意,您仍然可以利用您的 $(test_var) 例如檢查它是否具有值“firstValue”,然后在肯定的情況下創建“newVar”并將其用于其他作業,您甚至可以使用 $ 的值(test_var) 在您的“newVar”中并使用您之前設定的值:
- bash: echo "##vso[task.setvariable variable=new_var]$(test_var)"
displayName: set new variable value
通過這種方式,您可以動態“更改”管道的行為并保留模板檔案。
uj5u.com熱心網友回復:
不幸的是,您不能使用在運行時設定的變數,即。$test_var,作為模板的引數。認為模板不像函式,而更像片段。管道本質上交換了模板的內容以參考模板,并且所有引數都在那時進行評估和交換。
因此,當您設定$test_var為“firstval”時,模板會在那時進行評估,并且引數也設定為“firstval”。那么當你$test_var稍后在yaml中設定的時候,為時已晚。請參閱以下檔案:
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#context
重用代碼可能感覺很臟,但不幸的是,這將是推薦的解決方案。
- stage: DeployDEV
pool:
vmImage: 'windows-latest'
variables:
- group: [REDACTED]
- name: test_var
value: firstval
jobs:
- job: BuildDeploy
displayName: "REDACTED"
steps:
- script: echo "test_var = $(test_var)"
displayName: first variable pass
- bash: echo "##vso[task.setvariable variable=test_var]secondValue"
displayName: set new variable value
- script: echo "test_var = $(test_var)"
displayName: second variable pass
- job: Test
displayName: "Testjob"
steps:
- script: echo "test_var=$(test_var)"
name: TestVar
displayName: 'test'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/488380.html
標籤:重击 天蓝色 天蓝色的devops yaml 天蓝色管道
