在Azure Devops中部署具有多个Web作业的WebAPI项目

时间:2019-03-22 11:48:46

标签: azure asp.net-web-api deployment azure-devops continuous-deployment

我正在尝试使用Azure Devops进行CI / CD。我在推入时创建了要构建的适当的Git触发器,并在生成新构建时创建了一个新发行版。

在发布选项卡中,我试图使用“部署Azure应用程序服务”模板来部署具有多个webjob的WebAPI项目。所有日志似乎都表明一切正常,但是最后在Azure中检查应用程序服务时却一无所有!

我尝试了许多不同的配置,甚至还有更多的模板。根据日志,它们看起来都不错,但是实际上没有部署任何东西!

如果我尝试从VS2017进行构建/部署,效果会很好!

问题

  • 要通过Azure Devops成功部署代码,我需要做什么

我的构建YAML文件与默认文件相当接近,仅由于另一个SO帖子建议添加了CopyFiles @ 2:

trigger:
  tags:
    include:
    - slot*
  branches:
    include:
    - dev

pool:
  vmImage: 'VS2017-Win2016'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

name: $(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)

steps:
- task: NuGetToolInstaller@0

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: CopyFiles@2
  inputs:
    targetFolder: '$(Build.ArtifactStagingDirectory)'    

- task: PublishBuildArtifacts@1
  condition: succeeded() #and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

第二步,根据通过YAML文件生成的工件创建发行版。

Azure deployment pipeline

Azure deployment pipeline

2 个答案:

答案 0 :(得分:0)

请在软件包或文件夹选项中添加以下行

$(System.DefaultWorkingDirectory)\*.*

它将确保在部署时选择所有文件。

还请参考以下将webjob部署到Azure的方法:

  1. 修改Visual Studio Build任务以使用FileSystem部署Webjob(MSBuild参数:/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\WebJob" /p:DeployDefaultTarget=WebPublish)

  2. 添加“删除文件”任务以释放定义以删除bin文件夹(源文件夹: $(System.DefaultWorkingDirectory)/ WebJobVnext / drop / WebJob);内容:bin)

  3. 修改Azure App Service部署任务(

    1. 取消选中“使用Web Deploy发布”选项。
    2. 软件包或文件夹:$(System.DefaultWorkingDirectory)/ [工件名称] / drop / WebJob)

希望有帮助。

答案 1 :(得分:0)

您的部署任务有两个主要问题。

  1. 正如Mohit所说,您需要指定要部署的Web项目的zip文件,而不仅仅是其所在的目录。

  2. 您需要取消选中“从App_Data文件夹中排除文件”。这将阻止webjobs与网站一起部署

    2.1如果没有,则需要在Visual Studio中右键单击Web项目“添加”>“现有项目为Azure Webjob”。对每个webjob项目都执行此操作,以便它将webjobs与网站打包在一起