【问题标题】:Deploying a WebAPI project with several webjobs in Azure Devops在 Azure Devops 中部署具有多个 Web 作业的 WebAPI 项目
【发布时间】:2019-03-22 11:48:45
【问题描述】:

我正在尝试使用 Azure Devops 进行 CI/CD。我已经创建了适当的 Git 触发器以在我推送时进行构建,并且每当我生成新版本时我都会创建一个新版本。

在发布选项卡中,我尝试使用“部署 Azure 应用服务”模板部署一个包含多个 Web 作业的 WebAPI 项目。所有的日志似乎都表明一切正常,但最终我在 Azure 中检查应用服务时却一无所获!

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

如果我尝试从 VS2017 构建/部署,它的效果非常好!

问题

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

.

我的构建 YAML 文件非常接近默认值,仅添加了 CopyFiles@2,因为另一篇 SO 帖子建议这样做:

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 asp.net-web-api deployment azure-devops continuous-deployment


    【解决方案1】:

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

    $(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 应用服务部署任务(

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

    希望对你有帮助。

    【讨论】:

    • 非常感谢您,不知道我自己怎么会得到您的建议!我对您设置“包或文件夹”选项的第一个建议和您的 3.2 点感到困惑。应该设置两条路径吗?还是其中之一?
    • 作为特定文件夹,你可以使用 $(System.DefaultWorkingDirectory)/[artifact name] /drop/WebJob 和 fopr 默认工作目录下的所有文件夹,你可以使用 $(System.DefaultWorkingDirectory)* .* .您可以根据需要使用它。希望对您有所帮助。
    • 感谢您的快速回复!不幸的是,我不明白我该怎么做。我找到了一个设置目录的地方,我将如何为包和文件夹设置 $(System.DefaultWorkingDirectory)/[artifact name] /drop/WebJob 并为默认下的所有文件夹使用 $(System.DefaultWorkingDirectory)*.*工作目录?
    • 只使用一个,以适合您的需要。最合适的是直到您的 $(System.DefaultWorkingDirectory)/[artifact name] /drop 文件夹,因为它将包含您的所有工件。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 2016-04-23
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2019-05-14
      相关资源
      最近更新 更多