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



我有一个CI管道(YAML(,它构建一个将部署到现有Azure功能中的回购。CI管道正在做这就是工作。然而,完成后,我去功能应用程序->应用程序文件->我可以看到azure-pipeline.yml包含在其中(或者我认为它包含在构建过程中(。我尝试过使用路径和排除,但它们不起作用。我的问题是,我如何只排除azure-pipeline.yml,以便在管道构建完成后,azure-pepeline.yml不在Function 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'        

以下语法表示文件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) '

看看这里的

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

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

要从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存档中排除指定的文件夹。

最新更新