是否可以使用 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
) 的图像
经过多次测试,我发现使用Git Action是不行的。但你可以考虑使用 Visual Studio,导入发布配置文件。
首先,设置门户中的虚拟路径。 下载发布配置文件。 您将使用发布配置文件的内容。
修改配置文件。 将
msdeploySite
的值从 Your-Site
更改为 Your-Site\folder\subfolder
,例如 msdeploySite="dorissub pp"。将 destinationAppUrl
的值从 http://xxx.azurewebsites.net
更改为 http://xxx.azurewebsites.net/app
检查子文件夹。它有效。
这是我如何使用 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...
也许您应该选择另一种部署方式。
我能够使用 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
一些对我有帮助的资源: