使用 webapps-deploy 部署到特定文件夹(不仅仅是 wwwroot)

问题描述 投票:0回答:2

是否可以使用 webapps-deploy 操作部署到 Web 应用程序的特定路径(而不仅仅是部署到

wwroot
)?例如,部署到
wwwroot/app
下的 IIS 虚拟目录中。

当前 yaml GitHub 操作配置,无法在此处找到用于在 Web 服务器上设置请求路径的属性。

- name: "Run Azure webapp deploy action using publish profile credentials"
    uses: azure/webapps-deploy@v2
    with:
      app-name: MyApp 
      publish-profile: ${{ secrets.SECRET_PROFILE  }}
      package: build

显示我想要部署到的虚拟应用程序 (

wwwroot/app
) 的图像

azure-web-app-service github-actions azure-webapps
2个回答
1
投票

经过多次测试,我发现使用Git Action是不行的。但你可以考虑使用 Visual Studio,导入发布配置文件。

首先,设置门户中的虚拟路径。 下载发布配置文件。 您将使用发布配置文件的内容。

修改配置文件。

msdeploySite
的值从
Your-Site
更改为
Your-Site\folder\subfolder
,例如 msdeploySite="dorissub pp"。将
destinationAppUrl
的值从
http://xxx.azurewebsites.net
更改为
http://xxx.azurewebsites.net/app

从 VS 发布。

检查子文件夹。它有效。


这是我如何使用 Git Action。

添加秘密。 转到 GitHub 存储库设置并添加一个秘密,以发布配置文件的内容作为值,将其命名为

AZURE_WEBAPP_PUBLISH_PROFILE

使用此 yaml 文件运行工作流程:

name: .NET Core dorisxxx

on: [push]

env:
  AZURE_WEBAPP_NAME: dorisxxx    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '3.1.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@master
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v2
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

但是该项目仍然发布到 wwwroot...

也许您应该选择另一种部署方式。


0
投票

我能够使用 GitHub 操作使用虚拟路径成功将两个 Web API 部署到同一个 Web 服务。这是我采取的步骤。

创建虚拟应用程序 如果您希望将应用程序命名为

test
,则
Virtual path
将为
/test
Physical Path
值将为
site\wwwroot_test
。将物理路径设置为
site\wwwroot\test
也是可能的,但是,这就是我让它工作的方式。我也没有选中
Directory
Preload enabled
复选框。 修改发布配置文件
destinationAppUrl
的值需要添加路径。参见 Doris Lv 的回答。 添加进程外 AspNetCoreHostingModel 对于要在同一 Web 应用程序上托管的每个 Web 项目,您需要将以下内容添加到每个
.csproj
文件

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

修改应用服务url 接下来,由于这些应用程序将位于与根目录不同的路径中,因此您需要更改应用程序服务 url 以包含虚拟路径。

示例:如果

www.https://yoursite.azurewebsites.net/
是您创建的虚拟路径,那么现在将是
https://yoursite.azurewebsites.net/test
,而不是
/test

将部署目标步骤添加到 GitHub 操作 要部署到正确的目录,您需要在 GitHub 工作流程中添加一个步骤。以下是我的工作流程中的一段代码,它在我设置的部署复合操作之前在 Web 服务中设置

DEPLOYMENT_TARGET
环境变量。

以下是 GitHub 工作流程的片段:

# .github/workflows/cd.yml
jobs:
  # ... 
  target:
    needs: [set_environment, build, test, publish]
    runs-on: windows-latest
    environment:
      name: ${{ needs.set_environment.outputs.my_env }}
    steps:
    - uses: actions/checkout@v4
    - name: Run Composite Action Target
      uses: ./.github/actions/target
      with:
        Service-Principal: ${{ secrets.SPN }}
  deploy:
    needs: [set_environment, build, test, publish, target]
    runs-on: windows-latest
    environment: 
      name: ${{ needs.set_environment.outputs.my_env }}
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    - name: echo_environment
      run: |
        echo "The environment value is: 
${{needs.set_environment.outputs.my_env}}"
    - name: Run Composite Action Deploy
      uses: ./.github/actions/deploy
      with:
        Publish-Profile: ${{ secrets.TEST_PUBLISH_PROFILE }}
        Service-Principal: ${{ secrets.SPN }}
        Has-Api-Management-Service: true

这是复合动作。

# .github/actions/target/action.yml
runs:
  using: 'composite'
  steps:
    - name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ inputs.Service-Principal }}
    - name: Configure Azure Deployment Target
      run: az webapp config appsettings set --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.AZURE_APIM_RESOURCEGROUP }} --settings DEPLOYMENT_TARGET=${{ env.DEPLOYMENT_TARGET }} --output none
      shell: pwsh
    - name: logout
      run: >
        az logout
      shell: pwsh

为 GitHub 操作添加并发 由于这些部署工作流程依赖于

DEPLOYMENT_TARGET
值作为正确的
site\wwwroot_app
路径,因此如果两个
cd.yml
GitHub 操作一起运行,则构建最终可能会出现在错误的目录中。因此,为了避免这种情况,我向部署到同一 Web 应用程序的每个 cd 工作流程添加了相同的并发组。

name: Test Continuous Deployment
on:
  push:
    branches: TEST
    paths:
      - .github/**
      - TestDirectory/**
concurrency:
  group: webapp-deploy

一些对我有帮助的资源:

© www.soinside.com 2019 - 2024. All rights reserved.