从源代码管理定义应将哪个项目部署到Azure Functions应用

时间:2019-06-23 11:05:03

标签: azure azure-functions serverless

我们在c#net core中有一个Azure Function应用程序集合。每个应用程序都包含少量的Azure功能。所有功能应用程序都驻留在单个git存储库中。

我们希望我们的某些环境能够从源代码(例如bitBucket或gitHub)自动部署。

我们如何配置项目,以便Azure知道源中的哪个项目与哪个已创建的Function App相关?

几天来我一直在研究这个问题,但没有发现任何结果超出“它确实有效”的范围,因此只能假设我们缺少一些基本知识。

1 个答案:

答案 0 :(得分:1)

我建议使用Azure DevOps(以前称为VSTS)部署到Azure,您使用YAML定义了构建管道,该管道可以从每个功能应用程序发布工件。然后,这些工件会被发布管道拾取,并可以部署到Azure。

此的基本构建块是,首先在每个项目的构建管道中使用如下所示的YAML:

...

steps:
# a script task that let's you use any CLI available on the DevOps build agent, also uses a variable for the build config
- script: dotnet build MyFirstProjectWithinSolution\MyFirstProject.csproj --configuration $(buildConfiguration)
  displayName: 'dotnet build MyFirstProject'

# other steps removed, e.g. run and publish tests

- script: dotnet publish MyFirstProjectWithinSolution\MyFirstProject.csproj --configuration $(buildConfiguration) --output MyFirstArtifact
  displayName: 'dotnet publish MyFirstProject'

# a DevOps named task called CopyFiles (which is version 2 = @2), DevOps supplies lots of standard tasks you can make use of
- task: CopyFiles@2
  inputs:
    contents: 'MyFirstProjectWithinSolution\MyFirstArtifact\**'
    targetFolder: '$(Build.ArtifactStagingDirectory)'

# now publish the artifact which makes it available to the release pipeline, doing so into a sub folder allows multiple artifacts to be dealt with
- task: PublishBuildArtifacts@1
  displayName: 'publish MyFirstArtifact artifact'
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)\MyFirstProjectWithinSolution\MyFirstArtifact'
    artifactName: MyFirstArtifact

# now repeat the above for every project you need to deploy, each in their own artifact sub-folder

接下来,您将创建一个发行版,该发行版以最简单的形式提取工件并进行一个或多个部署,以下是一个简单的发行版,它部署了两个功能应用程序项目:

Simple Release Pipeline

在部署阶段(上面右侧)中,您可以定义发布过程,再次以其最简单的形式,您可以直接将其部署到生产或插槽中,尽管在功能插槽无法预览之前,您也可以旋转设置另一个功能应用程序并在那里进行部署和测试。

此屏幕快照显示了一个简单的部署,该部署使用来自Azure DevOps的标准Azure Function App部署:

Deployment Tasks

在部署阶段,您可以定义要部署的工件,并且在第一次运行构建管道之后,您将看到它创建的所有可用工件。

以上所有或部分内容可以通过推送分支(或按计划执行的其他触发器)自动执行。如果您要在发布之前或发布阶段之间进行手动干预,也可以添加通知和“门”。

还有其他方法可以减少这种情况,例如具有多个构建管道,它基本上是完全灵活的,但是以上是您可以一次部署一个或多个功能应用程序的要素。