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

从GitHub部署PowerShell代码至Azure Function(Windows消费计划)遇阻

PowerShell Azure Function部署问题(GitHub Actions + Terraform)

问题概述

通过GitHub Actions将PowerShell代码部署至Terraform创建的Windows消费计划Azure Function时,遇到以下问题:

  1. 初始Workflow执行成功,但Function门户无函数列表
  2. 简化Workflow后,出现Runtime错误:Microsoft.Azure.WebJobs.Script: Did not find functions with language [dotnet].,Runtime版本显示Error

当前环境配置

项目目录结构

.\packaged-functions\rules-backup-function
.\packaged-functions\rules-backup-function\analytical-rules-backup-function
.\packaged-functions\rules-backup-function\.funcignore
.\packaged-functions\rules-backup-function\.gitignore
.\packaged-functions\rules-backup-function\host.json
.\packaged-functions\rules-backup-function\local.settings.json
.\packaged-functions\rules-backup-function\profile.ps1
.\packaged-functions\rules-backup-function\requirements.psd1
.\packaged-functions\rules-backup-function\analytical-rules-backup-function\function.json
.\packaged-functions\rules-backup-function\analytical-rules-backup-function\run.ps1
.\packaged-functions\rules-backup-function\analytical-rules-backup-function\sample.dat

注:目录结构符合官方PowerShell Function规范(项目根目录含host.json,函数代码位于子文件夹内)

初始GitHub Workflow

name: Deploy Azure Function

on: workflow_dispatch

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

steps:
- name: Checkout code
  uses: actions/checkout@v2

- name: Zip folder
  run: |
    cd packaged-functions/rules-backup-function
    zip -r ../../output.zip .
  shell: bash

- name: Upload zip file
  uses: actions/upload-artifact@v2
  with:
    name: function-zip
    path: output.zip

  deploy-azure-function:
    runs-on: windows-latest
    needs: build-and-deploy
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

- name: 'Download zip file'
  uses: actions/download-artifact@v2
  with:
    name: function-zip
    path: .

- name: 'Run Azure Functions Action'
  uses: Azure/functions-action@v1
  with:
    app-name: ${{ secrets.AZURE_FUNCTIONAPP_NAME }}
    package: .
    publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

修改后的GitHub Workflow

name: Deploy PowerShell project to Azure Function App

on:  workflow_dispatch
  # [push]

env:
  AZURE_FUNCTIONAPP_PACKAGE_PATH: 'packaged-functions\rules-backup-function'       # set this to the path to your function app project, defaults to the repository root

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ secrets.AZURE_FUNCTIONAPP_NAME }}
        package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

Terraform配置

resource "azurerm_service_plan" "analytical-rules-backup" {
  name                = "analytical-rules-backup-plan"
  resource_group_name = module.environment.resource_group_name
  location            = module.environment.location
  os_type = "Windows"
  sku_name = "Y1"
}

resource "azurerm_windows_function_app" "analytical-rules-back-function" {
  name                       = "analytical-rules-backup-function"
  resource_group_name        = module.environment.resource_group_name
  location                   = module.environment.location
  
  storage_account_name       = azurerm_storage_account.analytical-rules-backup-sa.name
  storage_account_access_key = azurerm_storage_account.analytical-rules-backup-sa.primary_access_key
  service_plan_id            = azurerm_service_plan.analytical-rules-backup.id

  site_config {}
}

解决方案

1. 修复Terraform Function App配置(核心)

Azure Function默认使用.NET Runtime,需显式指定PowerShell Runtime及相关配置:

resource "azurerm_windows_function_app" "analytical-rules-back-function" {
  name                       = "analytical-rules-backup-function"
  resource_group_name        = module.environment.resource_group_name
  location                   = module.environment.location
  
  storage_account_name       = azurerm_storage_account.analytical-rules-backup-sa.name
  storage_account_access_key = azurerm_storage_account.analytical-rules-backup-sa.primary_access_key
  service_plan_id            = azurerm_service_plan.analytical-rules-backup.id

  # 指定PowerShell Runtime
  site_config {
    application_stack {
      powershell_version = "7.2" # 选择兼容的PowerShell版本,如7.0/7.2
    }
  }

  # 设置App Settings,确保Runtime配置生效
  app_settings = {
    "FUNCTIONS_WORKER_RUNTIME" = "powershell"
    "FUNCTIONS_EXTENSION_VERSION" = "~4" # 对应PowerShell 7.2的扩展版本,~3对应7.0
  }
}

执行terraform apply更新Function App配置。

2. 调整GitHub Workflow路径格式

Windows环境下路径分隔符用\可能引发问题,统一改为/:

env:
  AZURE_FUNCTIONAPP_PACKAGE_PATH: 'packaged-functions/rules-backup-function'

保持使用windows-latest runner,避免跨OS打包导致的路径或文件权限问题。

3. 验证部署结果

重新触发Workflow部署后,检查Azure Function门户:

  • Runtime版本应显示为PowerShell 7.x
  • 函数列表会自动加载analytical-rules-backup-function

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:40:54