Forum Discussion
Passing a here-string as adhoc Output Variable
- Sep 17, 2023
In Azure DevOps pipelines, when you set a variable using the `Write-Host` command as you've shown in your example, the variable is set to the value until the first newline character. To set a multi-line variable, you can use a different approach. You can use the `Write-Host` command with multiple `##vso[task.setvariable]` commands to set the variable line by line.
Here's an example of how you can set a multi-line variable in PowerShell:
$lines = @( "This is some text that I want to send", "to another task in my pipeline.", "This is another line of text." ) foreach ($line in $lines) { Write-Host "##vso[task.setvariable variable=scriptOutputMsg;isOutput=true]$line" }This PowerShell script creates an array of lines and then iterates through the lines, setting the `scriptOutputMsg` variable one line at a time. The `isOutput=true` parameter is used to indicate that this is an output variable.
In your downstream tasks, you can access this multi-line variable as `$(scriptOutputMsg)` and it will retain all the lines you've set in the loop.
parameters:
...
- name: azureServiceConnection
displayName: The service connection that has access to azure container registry in development environment
type: string
- name: dockerfilePath
displayName: The path to docker file
type: string
- name: image
displayName: The name of image
type: string
- name: containerRegistry
displayName: The name of container registry in development environment
type: string
- name: dockerBuildArgs
displayName: Any arguments as --build-arg, by deafult is empty (passing no argumnets to docker build command )
type: string
default: ' '
- name: versions
displayName: The versions of the image (list of tags that new generated image must be tagged with, coma separatd)
type: string
jobs:
- job: docker build
....
steps:
- task: AzureCLI@2
displayName: Acr login
inputs:
azureSubscription: ${{ parameters.azureServiceConnection }}
scriptType: "bash"
scriptLocation: "inlineScript"
failOnStandardError: false
inlineScript: |
az acr login --name ${{ parameters.containerRegistry }}
- powershell: |
$versions = "${{ parameters.versions }}"
$versionlist = $versions.Split(",") | foreach {$_.Trim() }
foreach ($version in $versionlist){
Write-Host "##vso[task.setvariable variable=TAGS;isOutput=true]$version"
}
displayName: 'Set versions for docker tasks'
name: SetVersions
- bash: |
echo $(SetVersions.TAGS)
- task: Docker@2
displayName: Build ${{ parameters.image }} image
inputs:
command: build
dockerfile: ${{ parameters.dockerfilePath }}
repository: ${{ parameters.containerRegistry }}/images/${{ parameters.image }}
arguments: --target ${{ parameters.image }} ${{ parameters.dockerBuildArgs }}
tags: |
$(SetVersions.TAGS)