I am working on Azure Pipelines on a Windows Self hosted Agent. I need my pipeline to run a PowerShell script and if the script is successful, the next stage do the deployment, else the task fails, we have to fix something and resume the task
I'll describe what the pipeline does since the start as it might help understand.
First, the pipeline calls a template with parameters:
stages:
- template: release.yml@templates
parameters:
dbConnectionString: ''
The template release.yml@templates is below:
parameters:
- name: 'dbConnectionString'
default: ''
type: string
There is the first stage that simply builds the project, works fine
stages:
- stage: Build
- job: Build_Project
steps:
- checkout: none
- template: build.yml
The second stage depends on the result of the previous one. For some cases of the template, there is no DB to check so I run the job only a parameter is provided. Then, I want to run the CompareFile script only if the DBCheck was successful or if there was no parameter.
- stage: Deploy
dependsOn:
- Build
condition: eq( dependencies.Build.result, 'Succeeded' )
jobs:
- job: CheckDb
condition: ne('${{ parameters.dbConnectionString }}', '')
steps:
- checkout: none
- template: validate-db.yml@templates
parameters:
ConnectionString: '${{ parameters.dbConnectionString }}'
- job: CompareFiles
dependsOn: CheckDb
condition: or( eq( dependencies.CheckDb.result, 'Succeeded' ), eq('${{ parameters.dbConnectionString }}', '') )
steps:
- checkout: none
- task: PowerShell@2
name: compareFiles
inputs:
targetType: filePath
filePath: 'compareFile.ps1'
- deployment: Deploy2
dependsOn: CompareFiles
environment: 'Env ST'
strategy:
runOnce:
deploy:
steps:
- task: PowerShell@2
inputs:
targetType: filePath
filePath: 'File.ps1'
The next job is to compare file the files, the CompareFile.ps1 file is below.
The file compareFileContent.ps1 tries to make the task fail or succeed but I don't know PowerShell enough.
I have found somewhere that $host.SetShouldExit(10) could make the task fail so I tried 10 for failure and 0 for success,
I also tried exit values but for now, testing with $equal = $true the stage "Deploy2" is skipped so I am blocked
[CmdletBinding()]
param ()
***
$equal = $true
if($equal) {
# make pipeline to succeed
$host.SetShouldExit(0)
exit 0
}
else {
# make pipeline to fail
$host.SetShouldExit(10)
exit 10
}
Would you have ideas why the deployment job is skipped?