使用 YAML 管道构建和部署多个 azure 函数项目
Build and Deploy multiple azure function projects using YAML pipeline
我正在尝试使用 YAML 管道在单个解决方案中构建和发布多个 azure 函数项目,但是当我发布包时,它们会相互覆盖,所以我只发布了最后一个构建的项目。
我使用这些步骤来构建:
- 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 包不受支持。
欢迎提出任何建议!
而不是 Publish Pipeline Artifacts task you could use artifact.upload 记录命令从单个脚本步骤上传多个工件:
Upload: Upload an artifact
##vso[artifact.upload]local file path
Usage
Upload a local file into a file container folder, and optionally publish an artifact as artifactname
.
Properties
containerfolder
= folder that the file will upload to, folder will be created if needed.
artifactname
= artifact name. (Required)
例子
- 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
Is there a way I can publish the functions by project?
根据您的描述,您在一个解决方案文件中有多个项目。
据我所知,在 Dotnet 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
我保留了模板的其余部分与原始模板相同 post。
感谢大家的帮助。
我正在尝试使用 YAML 管道在单个解决方案中构建和发布多个 azure 函数项目,但是当我发布包时,它们会相互覆盖,所以我只发布了最后一个构建的项目。
我使用这些步骤来构建:
- 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 包不受支持。
欢迎提出任何建议!
而不是 Publish Pipeline Artifacts task you could use artifact.upload 记录命令从单个脚本步骤上传多个工件:
Upload: Upload an artifact
##vso[artifact.upload]local file path
Usage
Upload a local file into a file container folder, and optionally publish an artifact as
artifactname
.Properties
containerfolder
= folder that the file will upload to, folder will be created if needed.
artifactname
= artifact name. (Required)
例子
- 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
Is there a way I can publish the functions by project?
根据您的描述,您在一个解决方案文件中有多个项目。
据我所知,在 Dotnet 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
我保留了模板的其余部分与原始模板相同 post。
感谢大家的帮助。