在Azure CI管道(YAML)中排除某些文件

ac1kyiln  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(116)

我有一个CI管道(YAML),它构建了一个将部署到现有Azure函数中的存储库。CI管道正在做它的工作。然而,在完成之后,我转到Function App -> App files ->我可以看到azure-pipeline.yml包含在那里(或者我认为它包含在构建过程中)。我试过使用路径和排除,但他们不工作。我的问题是,如何只排除azure-pipeline.yml,以便在管道构建完成后,azure-pipeline.yml不在Function App的App文件中。下面是我的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'

字符串

sauutmhj

sauutmhj1#

以下语法意味着文件README.mdazure-pipelines.yml不会触发构建。这并不意味着工作目录中排除了文件README.mdazure-pipelines.yml

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

字符串
我注意到您尝试归档文件夹$(workingDirectory),并在变量中定义了workingDirectory,实际上是$(System.DefaultWorkingDirectory)/System.DefaultWorkingDirectory是下载源代码文件的代理上的本地路径。
显然,文件README.mdazure-pipelines.yml在源代码中,因此它们也被存档。您可以在ArchiveFiles task之前添加CopyFiles task,以便使用匹配模式将所需文件从源文件夹复制到目标文件夹,然后归档目标文件夹。举例来说:

- 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) '

e0bqpujr

e0bqpujr2#

看这里

- 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

字符串
你在这里生产你的输出./$(workingDirectory)/bin,但你压缩了rootFolderOrFile: $(workingDirectory)。请将其更改为rootFolderOrFile: $(workingDirectory)/bin
编辑
请在调用存档前添加此

- script: |
    rm README.md
    rm azure-pipelines.yml
  workingDirectory: $(workingDirectory)


因此,您将从文件夹中删除它们,您以后存档。

rqdpfwrv

rqdpfwrv3#

若要从Azure Function YAML DevOps管道中的zip存档中排除多个文件夹,您可以修改PowerShell脚本以在存档过程之前删除要排除的所有文件夹。以下是您的操作方法:
1.创建一个PowerShell脚本来删除要排除的多个文件夹。将此脚本保存到存储库中。我们称之为“RemoveFolders.ps1”。

# RemoveFolders.ps1
$folders = @("<path_to_folder_1>", "<path_to_folder_2>", "<path_to_folder_3>")
foreach ($folderPath in $folders) {
    Remove-Item -Path $folderPath -Recurse -Force -ErrorAction SilentlyContinue
}

字符串
1.在YAML DevOps管道中,在ArchiveFiles任务之前添加PowerShell任务以执行“RemoveFolders.ps1”脚本。

- task: PowerShell@2
  displayName: 'Remove folders from archive'
  inputs:
    targetType: 'inline'
    script: |
      .\RemoveFolders.ps1


1.删除文件夹后,继续执行ArchiveFiles任务以创建zip存档。

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'


<path_to_folder_1><path_to_folder_2><path_to_folder_3>等替换为要排除的文件夹的实际路径。
通过使用PowerShell脚本删除多个文件夹,当ArchiveFiles任务运行时,这些文件夹将从zip存档中排除。您可以根据需要向PowerShell脚本中的$folders数组添加任意多个文件夹路径,以从存档中排除多个文件夹。
请确保根据您的项目结构调整脚本和文件夹路径,这应该会成功地从Azure Function YAML DevOps管道中的zip存档中排除指定的文件夹。

相关问题