簡體   English   中英

使用 YAML 管道構建和部署多個 azure function 項目

[英]Build and Deploy multiple azure function projects using YAML pipeline

我正在嘗試使用 YAML 管道在單個解決方案中構建和發布多個 azure function 項目,但是當我發布這些包時,它們會相互覆蓋,所以我只發布了最后一個構建的項目。

我使用這些步驟來構建:

- task: DotNetCoreCLI@2
  displayName: 'Restore project dependencies'
  inputs:
    command: 'restore'
    feedsToUse: 'config'
    nugetConfigPath: Nuget.config
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build the project - $(configuration)'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration $(configuration) -p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)\Functions" -p:ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)\Artifacts"'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Publish the project - $(configuration)'
  inputs:
    command: 'publish'
    projects: '**/*Functions.csproj'
    publishWebProjects: false
    arguments: '--no-build --configuration $(configuration) --output $(Build.ArtifactStagingDirectory)\Functions'
    zipAfterPublish: true
    modifyOutputPath: true

 - publish: '$(Build.ArtifactStagingDirectory)\Functions'
   displayName: 'Publish drop'
   artifact: functions

有沒有辦法按項目發布功能? 我嘗試了 VSBuild 任務來構建解決方案,但是當嘗試使用 AzureFunctionApp 任務部署到 Azure 時,它錯誤地指出 msBuild 包不受支持。

歡迎任何建議!

有沒有辦法按項目發布功能?

根據您的描述,您在一個解決方案文件中有多個項目。

據我所知,在 Do.net Publish 任務中,您可以設置publishWebProjects: false 然后功能將按項目發布。

你可以參考我的示例:

- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    projects: '**/*.csproj'
    arguments: '--no-restore --configuration $(configuration) -p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)\Functions" -p:ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)\Artifacts"'

- task: DotNetCoreCLI@2
  displayName: Publish
  inputs:
    command: publish
    publishWebProjects: false
    projects: '**/*.csproj'
    arguments: '--no-build --configuration $(configuration) --output $(Build.ArtifactStagingDirectory)/Functions'
    zipAfterPublish: True
  continueOnError: true

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: ' $(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

結果:

在此處輸入圖像描述

我想出了一個適合我的模式。 我沒有嘗試僅通過一項任務發布我的解決方案中的所有項目,而是將它們拆分並為每個項目分配了自己的任務。 所以我從這個開始:

  - task: DotNetCoreCLI@2
    displayName: 'Publish Functions'
    inputs:
      command: publish
      projects: '**/*.Functions.csproj'
      publishWebProjects: false
      arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions'
      modifyOutputPath: true
      zipAfterPublish: true

對此:

  - task: DotNetCoreCLI@2
    displayName: 'Publish Project 1 Functions'
    inputs:
      command: publish
      projects: '**/Project1.Functions.csproj'
      publishWebProjects: false
      arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions\Project1'
      modifyOutputPath: true
      zipAfterPublish: true

  - task: DotNetCoreCLI@2
    displayName: 'Publish Project2 Functions'
    inputs:
      command: publish
      projects: '**/Project2.Functions.csproj'
      publishWebProjects: false
      arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions\Project2'
      modifyOutputPath: true
      zipAfterPublish: true

我保留了模板的 rest 與原始帖子中的相同。

感謝所有的幫助。

您可以使用artifact.upload日志命令從單個腳本步驟上傳多個工件,而不是發布管道工件任務:

上傳:上傳工件

##vso[artifact.upload]local file path

用法

將本地文件上傳到文件容器文件夾,並可選擇將工件發布為artifactname

特性

containerfolder = 文件將上傳到的文件夾,如果需要將創建文件夾。
artifactname名稱 = 工件名稱。 (必需的)

例子

- pwsh: |
    Get-ChildItem -LiteralPath '$(Build.ArtifactStagingDirectory)\Functions' -Filter '*.zip' -File |
    ForEach-Object {
        '##vso[artifact.upload containerfolder={0};artifactname={0}]{1}' -f $_.BaseName, $_.FullName
    }
  displayName: Publish artifacts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM