【问题标题】:Excluding Certain Files in Azure CI Pipeline (YAML)排除 Azure CI 管道 (YAML) 中的某些文件
【发布时间】:2020-12-09 16:19:47
【问题描述】:

我有一个 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'        

【问题讨论】:

    标签: azure azure-devops yaml azure-pipelines


    【解决方案1】:

    以下语法意味着文件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) '
    

    【讨论】:

    • 你查看我的回复了吗?有用吗?
    【解决方案2】:

    看这里

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

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

    【讨论】:

    • 请通过在Archove files 步骤之前添加- script: ls '$(workingDirectory)' 来检查您的工作目录。
    • 这是我的工作目录,我想将 README.md 和 azure-pipelines.yml 排除在 Function App 的 App 文件中 imgur.com/a/tIT1wFw
    • 这有点奇怪,但请检查我的编辑。
    猜你喜欢
    • 2021-03-20
    • 2020-03-21
    • 2020-12-20
    • 2020-10-12
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多