You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署Azure Web App无法拉取GitHub Fork仓库代码

问题排查:Azure无法触发GitHub Actions部署Fork仓库的.NET应用

场景

尝试将示例.NET Hello World Web应用部署到Azure,引用自己Fork的GitHub仓库。部署流程显示已关联Fork仓库,但GitHub Actions工作流未触发,Web应用也未拉取Fork仓库的代码。调整Terraform多项配置后仍无效果。

问题

已配置仓库地址并提供GitHub认证令牌,但GitHub Actions工作流始终未触发,Web应用无法从Fork仓库部署。调整源代码控制槽的manual_integration变量也无效。

疑问

  1. 是否遗漏了GitHub与Azure之间的额外认证步骤或配置,确保部署触发并拉取Fork仓库的代码?
  2. 部署后等待10分钟站点仍未生效,但通过Azure门户手动部署可正常运行。

Terraform配置

webapp.tf

resource "azurerm_service_plan" "srv_plan" {
  name                = "${local.prefix}service-plan"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  sku_name            = var.webapp_sku
  os_type             = var.webappos
  tags                = local.common_tags
}

resource "azurerm_windows_web_app" "dot_net_web_app" {
  name                          = "${local.prefix}dotnet-app"
  location                      = azurerm_resource_group.rg.location
  resource_group_name           = azurerm_resource_group.rg.name
  service_plan_id               = azurerm_service_plan.srv_plan.id
  https_only                    = true
  public_network_access_enabled = false
  enabled                       = true
  webdeploy_publish_basic_authentication_enabled = true

  site_config {
    always_on           = true
    minimum_tls_version = var.tls_version
    application_stack {
      current_stack  = var.stack
      dotnet_version = var.stack_version
    }
  }
}

resource "azurerm_source_control_token" "source_token" {
  type         = "GitHub"
  token        = var.github_auth_token
  token_secret = var.github_auth_token
}

resource "azurerm_windows_web_app_slot" "slot" {
  name           = "${local.prefix}app-slot"
  app_service_id = azurerm_windows_web_app.dot_net_web_app.id
  site_config {}
}

resource "azurerm_app_service_source_control_slot" "git_source" {
  slot_id                = azurerm_windows_web_app_slot.slot.id
  repo_url               = var.webapp_repo_url
  branch                 = var.webapp_repo_branch
  use_mercurial          = false
  use_manual_integration = false
  depends_on             = [azurerm_source_control_token.source_token]
  github_action_configuration {
    generate_workflow_file = false
  }
}

variables.tf

variable "webapp_sku" {
  type    = string
  default = "P1v2"
}

variable "webappos" {
  type    = string
  default = "Windows"
}

variable "tls_version" {
  type    = string
  default = "1.2"
}

variable "stack" {
  type    = string
  default = "dotnet"
}

variable "stack_version" {
  type    = string
  default = "v7.0"
}

variable "subresource" {
  type    = list(string)
  default = ["sites"]
}

variable "webapp_repo_url" {
  type    = string
  default = "https://github.com/ZimCanIT/hello-world-webapp"
}

variable "webapp_repo_branch" {
  type    = string
  default = "main"
}

variable "github_auth_token" {
  type        = string
  sensitive   = true
  description = "Token for authorization"
}

相关截图

输入图片描述

输入图片描述


解决方案建议

1. 检查GitHub令牌权限

确保你的GitHub个人访问令牌(PAT)具备以下权限:

  • repo:允许访问私有/公共仓库
  • workflow:允许管理工作流
    如果Fork仓库属于组织,还需确认令牌拥有组织级别的访问权限,且未被组织的安全策略限制。

2. 修复GitHub Action工作流配置

你的Terraform中设置了generate_workflow_file = false,Azure不会自动生成部署工作流。需二选一:

  • 将generate_workflow_file改为true,让Azure自动在Fork仓库中创建工作流文件
  • 手动在Fork仓库添加.github/workflows/azure-webapps-deploy.yml,示例配置如下:
name: Build and deploy ASP.Net Core app to Azure Web App

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v4

    - name: Set up .NET Core
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '7.0.x'

    - name: Build with dotnet
      run: dotnet build --configuration Release

    - name: dotnet publish
      run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

    - name: Upload artifact for deployment job
      uses: actions/upload-artifact@v4
      with:
        name: .net-app
        path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    runs-on: windows-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v4
      with:
        name: .net-app

    - name: Deploy to Azure Web App
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v3
      with:
        app-name: 'your-webapp-name'
        slot-name: 'app-slot'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: .

3. 验证源代码控制集成模式

use_manual_integration = false表示自动集成,但必须有对应的工作流文件才能触发部署。若选择手动集成,需在Azure门户手动触发部署,但这不符合自动部署需求,建议保持自动集成并确保工作流配置正确。

4. 检查Fork仓库的Actions触发规则

进入Fork仓库的GitHub设置,确认:

  • Actions未被禁用
  • 分支main的推送事件会触发工作流(无自定义规则阻止)
  • 分支无保护规则限制Actions运行

5. 排查网络限制

你的Web应用设置了public_network_access_enabled = false,可能导致Azure无法访问GitHub仓库。可临时将其改为true测试是否是网络问题,若解决则需配置:

  • VNet集成,允许Web应用访问GitHub的出站流量
  • 添加服务端点或网络安全组规则,放行GitHub的IP范围

6. 重新验证Azure与GitHub的连接

在Azure门户的Web应用部署中心,删除现有GitHub连接并重新授权,确保关联的是正确的Fork仓库且令牌有效。


内容的提问来源于stack exchange,提问作者ZimCanIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:34:54