AZDO: Script Task Multiline

1 minute read

Description:

Follow these steps to set your scripts to be multiline if you use a Windows build agent or a linux build agent. More info can be found here. Post was inspired by this and tested to confirm.

To Resolve:

  1. As mentioned in the article in the description, the easiest fix is to just target the bash task regardless of what your agent is. Then it will work on Windows or linux.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    - task: Bash@3
       displayName: "terraform init"
       inputs:
          targetType: inline
          failOnStderr: true
          script: |
             terraform init -backend-config="access_key=$(my-key)"
    - task: Bash@3
       displayName: "terraform validate"
       inputs:
          targetType: inline
          failOnStderr: true
          script: |
             terraform validate
    - task: Bash@3
       displayName: "terraform plan"
       inputs:
          targetType: inline
          failOnStderr: true
          script: |
             set TF_LOG=ERROR
             set TF_LOG_PATH=$(Build.ArtifactStagingDirectory)\crash.log
             set
             terraform plan \
                -var="subscription_id=$(myvar1_value)" \
                -var="tenant_id=$(myvar2_value)" \
                -var="client_id=$(myvar3_value)" \
                -var="client_secret=$(myvar4_value)" \
                -var="region=westus" \
                -out "tf.plan"
    
  2. For Windows build agents specifically, use the ^ character which is line continuation for batch scripts:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    - script: |
          terraform plan ^
          -var="subscription_id=$(myvar1_value)" ^
          -var="tenant_id=$(myvar2_value)" ^
          -var="client_id=$(myvar3_value)" ^
          -var="client_secret=$(myvar4_value)" ^
          -var="region=westus" ^
          -out "tf.plan"
       displayName: 'terraform plan'
    
  3. For linux build agents specifically, use the \ character which is line continuation for bash scripts:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    - script: |
       set TF_LOG=ERROR
       set TF_LOG_PATH=$(Build.ArtifactStagingDirectory)\crash.log
       set
       terraform plan \
          -var="subscription_id=$(myvar1_value)" \
          -var="tenant_id=$(myvar2_value)" \
          -var="client_id=$(myvar3_value)" \
          -var="client_secret=$(myvar4_value)" \
          -var="region=westus" \
          -out "tf.plan"
      displayName: 'terraform plan'