rtqr
rtqr

Reputation: 3

Azure DevOps: passing runtime parameters for copy task (using conditional insert) - template expression

I'm defining these parameters in Azure_pipeline.yaml:

parameters:
- name: 'buildtype'
  default: entire
  type: string
  values:
  - entire
  - reduced

I've defined this copy task in task.yaml using the few other stages & jobs templates and parameters values:

steps:
- ${{ if eq(parameters.buildtype, 'entire') }}:
  - task: CopyFiles@2
    displayName: Deploy ${{ parameters.buildtype }} Build to ${{ parameters.deploymentFolder }}
    inputs:
      SourceFolder: $(Build.ArtifactStagingDirectory)/${{ parameters.appName }}
      Contents: |
                **
                !.config/**/*
      TargetFolder: ${{ parameters.deploymentFolder }}
      OverWrite: true
      flattenFolders: false
      enabled: true 
    
- ${{ if eq(parameters.buildtype, 'reduced') }}:
  - task: CopyFiles@2
    displayName: Deploy ${{ parameters.buildtype }} Build to ${{ parameters.deploymentFolder }}
    inputs:
      SourceFolder: $(Build.ArtifactStagingDirectory)/${{ parameters.appName }}
      Contents: |
                **
                !.config/**/*
                !$(Build.ArtifactStagingDirectory)/${{ parameters.appName }}/appsettings.Staging
      TargetFolder: ${{ parameters.deploymentFolder }}
      OverWrite: true
      flattenFolders: false
      enabled: true

From this task, I am trying to copy the required files to deployment folder, based on the Run time parameter values=entire/reduced name=buildtype. During the pipeline run, it's evaluating as "False".

I haven't shared the complete template and values due to restrictions.

Ref: Conditional insertion - Microsoft docs

Upvotes: 0

Views: 133

Answers (1)

Rui Jarimba
Rui Jarimba

Reputation: 18084

You're referencing parameters buildtype, appName and deploymentFolder in your template (tasks.yaml) but you forgot to define them.

Try the following:

# task.yaml

parameters:
  - name: 'buildtype'
    displayName: 'Build Type'
    type: string

  - name: 'appName'
    displayName: 'Application Name'
    type: string

  - name: 'deploymentFolder'
    displayName: 'Deployment Folder'
    type: string

steps:
  - script: |
      echo "Deploying ${{ parameters.buildtype }} Build"
    displayName: 'Deploy ${{ parameters.buildtype }} Build'

  - ${{ if eq(parameters.buildtype, 'entire') }}:
    - task: CopyFiles@2
      displayName: Deploy ${{ parameters.buildtype }} Build to ${{ parameters.deploymentFolder }}
      inputs:
        SourceFolder: $(Build.ArtifactStagingDirectory)/${{ parameters.appName }}
        Contents: |
          **
          !.config/**/*
        TargetFolder: ${{ parameters.deploymentFolder }}
        OverWrite: true
        flattenFolders: false
        enabled: true 
      
  - ${{ if eq(parameters.buildtype, 'reduced') }}:
    - task: CopyFiles@2
      displayName: Deploy ${{ parameters.buildtype }} Build to ${{ parameters.deploymentFolder }}
      inputs:
        SourceFolder: $(Build.ArtifactStagingDirectory)/${{ parameters.appName }}
        Contents: |
          **
          !.config/**/*
          !$(Build.ArtifactStagingDirectory)/${{ parameters.appName }}/appsettings.Staging
        TargetFolder: ${{ parameters.deploymentFolder }}
        OverWrite: true
        flattenFolders: false
        enabled: true

Using the template - example:

# Azure_pipeline.yaml

parameters:
  - name: 'buildtype'
    displayName: 'Build Type'
    type: string
    default: entire
    values:
    - entire
    - reduced

trigger: none

pool:
  vmImage: 'ubuntu-latest'

steps:
  # other tasks here

  - template: task.yaml
    parameters:
      buildtype: ${{ parameters.buildtype }}
      appName: 'myapp'
      deploymentFolder: '/my/deployment/folder'

Upvotes: 1

Related Questions