【问题标题】:Azure Devops Change the Deploy FolderAzure Devops 更改部署文件夹
【发布时间】:2020-02-11 07:53:42
【问题描述】:

我正在使用 Azure Devops 将 asp.net core 3.1 Web 应用程序自动构建和部署到 Azure 应用程序服务。

问题在于它将应用程序部署到奇怪的文件夹。而不是 wwwroot 文件夹,它位于 /home/site/wwwroot/Content/D_C/a/1/s/ExampleFolder/ExampleFolder2/ExampleFolder3/obj/Staging/netcoreapp3.1/PubTmp/Out 如果重要,应用服务在 Linux 上。

我如何才能将其修复/更改为位于主文件夹中?

【问题讨论】:

    标签: azure asp.net-core azure-devops


    【解决方案1】:

    我通过创建使用 dotnet 代理而不是 Visual Studio 构建代理的新管道解决了我的问题。部署到 Linux 应用服务时,请确保使用 CLI。您可以查看@martin-brandl 的答案,例如管道。

    您也可以参考这个 Devops SE 问题。问题很相似: https://devops.stackexchange.com/questions/9598/azure-devops-artifact-zip-folder-structure-for-net-core-3-0-application

    我正在寻找这个事实:

    我有一个 ASP.NET Core 3.0 应用程序,我在 Azure DevOps 中有完整的 CI/CD 设置。该应用程序托管在 Ubuntu 18.04 服务器计算机上。

    因此,我可以放心地假设您正在开发要在 Ubuntu 中托管的 ASP.NET Core 3.0 应用程序。任何 .NET Core 3.0(或更高版本)应用程序都意味着您应该依赖 dotnet build 而不是使用 VSBuild。

    此外,您曾声明您将在 Ubuntu 18.x 上托管应用程序,那么您还应该在运行于 Ubuntu 的 Azure DevOps 代理上运行构建。这意味着您应该只在DotNetCoreCLI@2 任务中使用dotnet build,因为VSBuild 任务仅在基于Windows 的代理上运行,而不是在Ubuntu 上运行,并且它旨在编译.NET Framework 和.NET Core 以外的其他平台。

    请在https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops查阅DotNetCoreCLI@2任务的官方文档

    使用dotnet build 后,使用dotnet publish 发布您的工件。它更容易,也是发布 .NET Core 应用程序的最佳方式。

    我的仓库中有dotnet build 和dotnet publish 的示例用法:https://github.com/eriawan/dotnetcore-cicd-samples/blob/master/yaml-samples/sample_pipelines_check.yml

    【讨论】:

      【解决方案2】:

      您应该与我们分享您的管道,否则,我们无法告诉您您需要更改/修复什么。

      但是,这里的示例使用 AzureWebApp@1 任务将 .NET Core 3.1 应用程序部署到 Azure Web 应用程序。

      trigger:
        branches:
          include:
          - master
      
      stages:
      - stage: Build
        jobs:
        - job: 'BuildArtifact'
          pool:
            vmImage: 'ubuntu-latest'
          steps:
      
          - task: UseDotNet@2
            inputs:
              packageType: sdk
              version: 3.1.x
      
          - task: DotNetCoreCLI@2
            displayName: Build
            inputs:
              command: 'build'
              projects: PATH/TO/YOUR/Project.csproj
              arguments: --output $(System.DefaultWorkingDirectory)/publish_output --configuration Release
      
          - task: ArchiveFiles@2
            displayName: 'Archive files'
            inputs:
              rootFolderOrFile: '$(System.DefaultWorkingDirectory)/publish_output'
              includeRootFolder: false
              archiveType: zip
              archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
              replaceExistingArchive: true
      
          - publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            artifact: drop
      
      - stage: Deploy
        dependsOn: Build
        condition: succeeded()
        jobs:
        - deployment: 'Deploy'
          pool:
            vmImage: 'ubuntu-latest'
          environment: Development
          strategy:
            runOnce:
              deploy:
                steps:
                - task: AzureWebApp@1
                  displayName: Azure Web App Deploy
                  inputs:
                    azureSubscription: YourAzureSubscription
                    appName: YourAppName
                    package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
                    appType: webAppLinux
      

      【讨论】:

      • 感谢您的回复!它部署成功,所以我认为唯一的问题是部署的路径?你能告诉我这是什么配置,或者它不像我想的那么简单吗? @martin-brandl
      • 在部署中,您只需指定包的路径。所以你的错误可能在构建过程中?你是如何构建你的应用程序的=
      • pastebin.com/dc97WmVx 这是构建解决方案 YAML。如果您还需要什么,请告诉我。
      • @AlexanderPetkov 为什么不使用 .net 核心 cli 来构建项目?这可能会解决您的问题。
      • 在发布工件中有“发布路径”设置。你认为这是我需要改变的吗? imgur.com/a/ZRIv7gM
      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2020-03-24
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多