The release pipeline don't use the parameter given to the template and use the default empty string value
Error Message:
An error occurred while loading the YAML build pipeline. Unexpected symbol: '.'. Located at position 34 within expression: and(succeeded(), ne(dependencies..outputs['diff.no_diff'], 'true')).
# templates/microservice-release.yaml
parameters:
- name: microservice
default: ''
- name: name
default: ''
jobs:
- job: ${{ parameters.name }}
displayName: Check for Changes
pool:
name: MyPool
steps:
- checkout: self
clean: true
- bash: |
if git diff --quiet HEAD~ HEAD ${{ parameters.microservice }}; then
echo "##[section]No changes Found in ${{ parameters.microservice }}"
echo "##vso[task.setvariable variable=no_diff;isOutput=true]true"
else
echo "##[section]There are changes. Build is required."
fi
name: diff
- job:
dependsOn:
- ${{ parameters.name }}
condition: and(succeeded(), ne(dependencies.${{ parameters.name }}.outputs['diff.no_diff'], 'true'))
displayName: ${{ parameters.microservice }}
trigger:
- Mybranch
jobs:
- template: templates/microservice-release.yaml
parameters:
name: microservice1
microservice: 'microservice1'
- template: templates/microservice-release.yaml
parameters:
name: microservice2
microservice: 'microservice2'
The error could happen when you have no name
value defined in your main.yaml.
Please double check the name value.
I used your main.yaml, and template.yaml, fixed the checkout step in template(remove clean
but add fetchDepth
as need to diff with HAED~, i delete the pool as i used Microsoft-hosted agent pool).
- checkout: self
#clean: true
fetchDepth: 2
It works as expected. Eg: only update on microservice2
, it can detect the change:
Here is the yaml, you can copy and paste to your side for a check.
main.yaml:
trigger: none
jobs:
- template: templates/microservice-release.yaml
parameters:
name: microservice1
microservice: 'microservice1'
- template: templates/microservice-release.yaml
parameters:
name: microservice2
microservice: 'microservice2'
template.yaml:
# templates/microservice-release.yaml
parameters:
- name: microservice
default: ''
- name: name
default: ''
jobs:
- job: ${{ parameters.name }}
displayName: Check for Changes
steps:
- checkout: self
#clean: true
fetchDepth: 2
- bash: |
if git diff --quiet HEAD~ HEAD ${{ parameters.microservice }}; then
echo "##[section]No changes Found in ${{ parameters.microservice }}"
echo "##vso[task.setvariable variable=no_diff;isOutput=true]true"
else
echo "##[section]There are changes. Build is required."
fi
name: diff
- job:
dependsOn:
- ${{ parameters.name }}
condition: and(succeeded(), ne(dependencies.${{ parameters.name }}.outputs['diff.no_diff'], 'true'))
displayName: ${{ parameters.microservice }}
steps:
- script: echo test