Azure DevOps 构建多个 dotnet 函数并将其部署到同一个函数应用程序

Azure DevOps build and deploy multiple dotnet functions to same functionapp

我的职能在: /src/functions/

.NET Core函数命名 FunctionApp1 和 FunctionApp2

我正在尝试构建这两个函数并将它们部署到我的函数应用程序中。

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

- task: DotNetCoreCLI@2
  displayName: 'Build project'
  inputs:
    projects: 'src/functions/**/*.csproj'
    arguments: '--output publish_output --configuration Release'

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: 'publish_output/'
    includeRootFolder: false

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'

- task: DownloadBuildArtifacts@0
  displayName: 'Download Build Artifacts'
  inputs:
    artifactName: drop
    extractTars: false

- task: AzureFunctionApp@1
  displayName: 'Azure Function App Deploy: myfunk'
  inputs:
    azureSubscription: '(sadfgghjkkk)'
    appType: functionApp
    appName: myfunk
    package: '$(System.ArtifactsDirectory)/*.zip'

构建和发布运行良好,但我最终只有一个函数存在。我如何构建该目录中的每个函数,然后单独发布它们?

我建议你把这个包起来

- task: DotNetCoreCLI@2
  displayName: 'Build project'
  inputs:
    projects: 'src/functions/**/*.csproj'
    arguments: '--output publish_output --configuration Release'

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: 'publish_output/'
    includeRootFolder: false

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'

- task: DownloadBuildArtifacts@0
  displayName: 'Download Build Artifacts'
  inputs:
    artifactName: drop
    extractTars: false

- task: AzureFunctionApp@1
  displayName: 'Azure Function App Deploy: myfunk'
  inputs:
    azureSubscription: '(sadfgghjkkk)'
    appType: functionApp
    appName: myfunk
    package: '$(System.ArtifactsDirectory)/*.zip'

as a template 然后重复使用几次。

parameters:
- name: functionName
  type: string
  default: ' '

steps:
- script: echo ${{ parameters.functionName}}
- task: DotNetCoreCLI@2
  displayName: 'Build project'
  inputs:
    projects: 'src/functions/**/${{ parameters.functionName}}.csproj'
    arguments: '--output ${{ parameters.functionName}} --configuration Release'

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

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: ${{ parameters.functionName}}'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/${{ parameters.functionName}}-$(Build.BuildId).zip' 
    ArtifactName: '${{ parameters.functionName}}'

- task: AzureFunctionApp@1
  displayName: 'Azure Function App Deploy: myfunk'
  inputs:
    azureSubscription: '(sadfgghjkkk)'
    appType: functionApp
    appName: myfunk
    package: '$(Build.ArtifactStagingDirectory)/${{ parameters.functionName}}-$(Build.BuildId).zip'

然后

steps:
  - template: function-deploy.yml
    parameters:
      functionName: 'Func1'
  - template: function-deploy.yml
    parameters:
      functionName: 'Func2'

注意:我手头没有解决方案来验证这里是否有错别字。