Azure Dev Ops warnings inline shell script

Viewed 600

Problem

I am running an inline shell script on a remote machine via SSH in an Azure Dev Ops pipeline. Depending on some conditions, running the pipeline should throw a custom warning.

The feature works, albeit in a very twisted way: when running the pipeline, the warning always appears. To be more precise:

  • If the condition it not met, the warning appears once.
  • If the condition is met, the warning appears twice.

The example below should give a clear illustration of the issue.

Example

Let's say we have the following .yaml pipeline template. Please adapt the pool and sshEndpoint settings for your setup.

pool: 'Default'

steps:

- checkout: none
  displayName: Suppress regular checkout

- task: SSH@0
  displayName: 'Run shell inline on remote machine'
  inputs:
    sshEndpoint: 'user@machine'
    runOptions: inline
    inline: |
     if [[ 3 -ne 0 ]]
     then
       echo "ALL GOOD!"
     else
      echo "##vso[task.logissue type=warning]Something is fishy..."
     fi
    failOnStdErr: false

Expected behavior

So, the above bash script should echo ALL GOOD! as 3 is not 0. Therefore, the warning message should not be triggered.

Current behavior

However, when I run the above pipeline in Azure Dev Ops, the step log overview says there is a warning:

Step Log Overview

The log itself looks like this (connection details blacked out):

enter image description here

So even though the code takes the ALL GOOD! code path, the warning message appears. I assume it is because the whole bash script is echoed to the log - but that is just an assumption.

Question

How can I make sure that the warning only appears in the executed pipeline when the conditions for it are satisfied?

1 Answers
Related