Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Excluding Certain Files in Azure CI Pipeline (YAML)

I have a CI pipeline (YAML) that builds a repo that will deploy into an existing Azure Function. The CI pipeline is doing it is job. However, after it is done, and I go to Function App -> App files -> I can see the azure-pipeline.yml is included in there (or i think it was included in the build process). I have tried using paths and exclude but they dont work. My question is, how do I exclude only that azure-pipeline.yml so that after the pipeline is done building, the azure-pipeline.yml is not in App files in Function App. Below is my YAML

trigger:
  branches:
    include:
      - master
  paths:
    exclude:
      - README.md
      - azure-pipelines.yml

variables:
  # Azure Resource Manager connection created during pipeline creation
  azureSubscription: 'DevOps-Test'
  # Function app name
  functionAppName: 'test'
  # Agent VM image name
  vmImageName: 'vs2017-win2016'
  # Working Directory
  workingDirectory: '$(System.DefaultWorkingDirectory)/'

  
stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - powershell: |
        if (Test-Path "extensions.csproj") {
            dotnet build extensions.csproj --output ./$(workingDirectory)/bin
        }
      displayName: 'Build extensions'
    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: $(workingDirectory)
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        replaceExistingArchive: true
    - publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
      artifact: drop
    - task: DownloadBuildArtifacts@0
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: 'drop'
        downloadPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    - task: AzureFunctionApp@1
      displayName: 'Azure functions app deploy'
      inputs:
        azureSubscription: '$(azureSubscription)'
        appType: functionApp
        appName: $(functionAppName)
        package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'        

like image 513
Jack Rogers Avatar asked Oct 22 '25 09:10

Jack Rogers


1 Answers

The following syntax means file README.md or azure-pipelines.yml won't trigger the build. It doesn't mean file README.md or azure-pipelines.yml are excluded in the working directory.

trigger:
  branches:
    include:
      - master
  paths:
    exclude:
      - README.md
      - azure-pipelines.yml

I've noticed you tried archiving folder $(workingDirectory), and workingDirectory defined in variable which was actually $(System.DefaultWorkingDirectory)/. System.DefaultWorkingDirectory is the local path on the agent where your source code files are downloaded.

Obviously, file README.md and azure-pipelines.yml are in the source code, so they are archived too. You could add a CopyFiles task before ArchiveFiles task to copy files you need from a source folder to a target folder using match patterns, then archive the target folder. For example:

- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory) '
  inputs:
    SourceFolder: '$(workingDirectory)'
    Contents: |
     **/*
     !*.md
     !*.yml
    TargetFolder: '$(Build.ArtifactStagingDirectory) '

- task: ArchiveFiles@2
  displayName: 'Archive files '
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory) '
like image 79
Cece Dong - MSFT Avatar answered Oct 24 '25 22:10

Cece Dong - MSFT



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!