skip to Main Content

I am using Azure Pipelines and have the following situation:

I have one repository with the folders A and B (and many more in the future). If I run the pipeline manually, I do chose A or B and the pipeline does stuff with the files in that folder.
This is fine for my branches, but I also want an automatic trigger for my main branch.

How do I get a variable that depends on the path of the code change?

My trigger looks something like this:

trigger:
  branches:
    include:
      - main
  paths:
    include:
      - abc/xyz/A/*
      - abc/xyz/B/*

And all I need is a variable that is A or B now, depending on the path where the change occured.
(Ideally if there are changes in both folders the pipeline should trigger twice, but this is the next problem I have to take on)

2

Answers


  1. trigger:
      branches:
        include:
          - main
          - dev
      paths:
        exclude:
          - azure-pipelines.yml
          - TfCodeandPlanValidation.yml
          - 'README.md'
      
    variables:
      - name: tf_version
        value: latest
      - name: variablegroupname
        ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
          value: kv-Prod
        ${{ if eq(variables['Build.SourceBranchName'], 'dev') }}:
          value: kv-Dev
      - name: env
        ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
          value: prod
        ${{ if eq(variables['Build.SourceBranchName'], 'dev') }}:
          value: dev
    

    Here I have mentioned it in the variable section.

    Login or Signup to reply.
  2. There is no direct way to achieve this.

    As a work around, you could use git command to get the commit message from the code change in A and B, and set the commit message as variable.

    git diff-tree --no-commit-id --name-only -r $(Build.SourceVersion)
    

    If the changes is from Folder A. Set "FolderAUpdated" to ture

    Write-Host "##vso[task.setvariable variable=FolderAUpdated]true"
    

    And set conditions to check the variable value

    "Custom conditions": and(succeeded(), eq(variables['FolderAUpdated'], 'true'))

    "(Ideally if there are changes in both folders the pipeline should
    trigger twice, but this is the next problem I have to take on)"

    A good option for this would create two individual pipelines, if both folders have changes, two pipelines will be triggered.

    Pipeline A

    trigger:
      branches:
        include:
          - main
      paths:
        include:
          - abc/xyz/A/*
    

    Pipeline B

    trigger:
      branches:
        include:
          - main
      paths:
        include:
          - abc/xyz/B/*
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search