部署Net Core 3.1 webapp项目和Azure Function App项目的管道
在我当前的解决方案中,我有两个项目:一个部署Net Core 3.1 webapp项目和Azure Function App项目的管道,azure,azure-devops,yaml,azure-functions,azure-pipelines,Azure,Azure Devops,Yaml,Azure Functions,Azure Pipelines,在我当前的解决方案中,我有两个项目:一个netcore3.1mvc项目和一个Azure函数应用程序项目。两者都托管在Azure中,但位于不同的资源中(AppService中的Webapp,Function App项目有自己的Function App资源) -SolutionName |_ WebApp Project |_ WebApp.AzureFunction project 在我当前的Azure DevOps管道中,我仅为webapp定义了一个构建和部署。我如何添加一个步骤,只使用A
netcore3.1mvc
项目和一个Azure函数应用程序
项目。两者都托管在Azure中,但位于不同的资源中(AppService中的Webapp,Function App项目有自己的Function App资源)
-SolutionName
|_ WebApp Project
|_ WebApp.AzureFunction project
在我当前的Azure DevOps管道中,我仅为webapp定义了一个构建和部署。我如何添加一个步骤,只使用Azure Function App并将其部署到其各自的资源中
编辑:根据下面的答案,我编辑了yaml。管道成功,但azure函数的zip为空
我当前的yaml文件如下所示:
# vm-image, variables, building of webapp removed for brevity.
steps:
- task: DotNetCoreCLI@2
displayName: 'Build Project Azure Function: WebApplicationTest.AzFunction'
inputs:
projects: 'WebApplicationTest.AzFunction.PipelineTest/*.csproj'
arguments: '--output $(System.DefaultWorkingDirectory)/publish_output --configuration Release'
zipAfterPublish: false
- task: ArchiveFiles@2
displayName: 'Archive Azure Function'
inputs:
rootFolderDirectory: '$(System.DefaultWorkingDirectory)/publish_output/'
includeRootFolder: false
ArchiveFile: '$(Build.ArtifactStagingDirectory)/functions/azfunction.zip'
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
displayName: 'Publish Azure Function: WebApplicationTest.AzFunction.PipelineTest'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)/functions'
ArtifactName: 'functions'
#Deploy different artifact to different resources
# Deploy webapp step removed for brevity.
- task: AzureFunctionApp@1
displayName: Deploy to Azure Function
inputs:
azureSubscription: $(azureSubscription)
appType: functionApp
appName: 'WebApplicationTest-AzFunction-PipelineTest'
package: '$(Pipeline.Workspace)/**/azfunction.zip'
我认为它需要另一个步骤,然后从$(Build.ArtifactStagingDirectory)
包中获取Azure Function App项目,并将其部署到我的Function App资源中。最好的方法是什么
我如何添加一个只需Azure Function应用程序并将其部署到其各自资源的步骤
我们可以为这两个项目构建和生成不同的工件
我们可以指定要构建的项目的完整路径,并生成具有不同名称的工件,以便部署到透视资源
例如,我在代码中添加了注释以帮助理解我的理想:
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
#build the Web App, MVC project, and generate the artifact MVC.zip under the path $(Build.ArtifactStagingDirectory)/MVC
- task: DotNetCoreCLI@2
displayName: 'dotnet publish for MVC'
inputs:
command: 'publish'
publishWebProjects: false
projects: 'MVC/MVC/*.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/MVC'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)/MVC'
artifactName: 'MVC'
#build the Azure function App, AzureFunctionApp project, and generate the artifact function.zip under the path $(Build.ArtifactStagingDirectory)/function
- task: DotNetCoreCLI@2
displayName: 'Build project for azure function'
inputs:
projects: MVC/AzureFunctionApp/AzureFunctionApp.csproj
arguments: '--output publish_output --configuration Release'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: 'publish_output/'
includeRootFolder: false
archiveFile: '$(Build.ArtifactStagingDirectory)/function/function.zip'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: Function'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/function'
ArtifactName: Function
#Deploy different artifact to different resources
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Subscription Name'
appType: 'webApp'
WebAppName: 'WebApp Name'
package: '$(Build.ArtifactStagingDirectory)/**/MVC.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
- task: AzureFunctionApp@1
displayName: Azure Function App Deploy
inputs:
azureSubscription: $(azureSubscription)
appType: functionApp
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/function.zip
测试结果:
为什么不使用两个管道?将所有内容都放在一个管道中不是更容易吗?如果我的项目有更多功能应用程序,那么每次添加一个应用程序时,我都需要一个额外的管道。从维护角度看,这似乎不是一个好的解决方案。Thnx,我现在正在尝试这一点。
参数:'--output publish中的输出是什么_输出
参考?@CMorgan,即指定生成的输出结果,它可以是其他路径,只是为了方便我们了解ArchiveFiles
任务中的文件源路径。好的,但是,我的zip文件是空的。似乎恢复并编译为.dll很好(1个dll文件),但我不知道它在做什么。我只看到我发布的zip是空的,存档步骤说它扫描了0个文件,没有添加新数据,从磁盘读取了0个文件。发布函数步骤发布到D:\a\1\s\Publish\u output\bin\AzFunction.dll。存档步骤中的rootFolderDirectory是“$(System.DefaultWorkingDirectory)/publish_output/”。我更新了主帖子。@CMorgan,我将路径更改为$(System.DefaultWorkingDirectory)/发布\u输出/
,但无法再现您的问题,请共享任务DotNetCoreCLI build for azure function和ArchiveFiles任务的调试日志。我会在我这边检查。顺便说一句,您可以通过OneDrive共享它,并提供完整的调试日志。它现在可以正常工作。工件已正确准备和下载,并部署到正确的资源在Azure中。非常感谢您的时间和耐心。我仍然不清楚所有预定义变量之间的差异,但现在它似乎也适用于'$(System.DefaultWorkingDirectory)/publish\u output'
。