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

使用GitHub Actions部署Azure Function失败且无明确报错原因

问题描述

我尝试用GitHub Actions部署Azure Function,代码基于微软官方文档的标准配置,仅新增了SSH密钥安装步骤来配合pip使用,Workflow配置如下:

env:
  AZURE_FUNCTIONAPP_NAME: 'func-app-name'
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'         # set this to the path to your function app project, defaults to the repository root
  PYTHON_VERSION: '3.11'                      # set this to the python version to use (e.g. '3.6', '3.7', '3.8')

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

    - name: Setup Python ${{ env.PYTHON_VERSION }} Environment
      uses: actions/setup-python@v4
      with:
        python-version: ${{ env.PYTHON_VERSION }}

    - name: Install SSH key  # extra step
      uses: webfactory/ssh-agent@v0.9.0
      with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

    - name: 'Resolve Project Dependencies Using Pip'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        python -m pip install --upgrade pip
        pip install -r requirements.txt --target=".python_packages/lib/site-packages"
        popd

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
        scm-do-build-during-deployment: true
        enable-oryx-build: true

部署失败,日志信息如下:

with:
    app-name: func-app-name
    package: .
    publish-profile: ***
    scm-do-build-during-deployment: true
    enable-oryx-build: true
    respect-pom-xml: false
    respect-funcignore: false
    remote-build: false
  env:
    AZURE_FUNCTIONAPP_NAME: func-app-name
    AZURE_FUNCTIONAPP_PACKAGE_PATH: .
    PYTHON_VERSION: 3.11
    pythonLocation: /opt/hostedtoolcache/Python/3.11.9/x64
    PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.9/x64/lib/pkgconfig
    Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.9/x64
    Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.9/x64
    Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.9/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.9/x64/lib
    SSH_AUTH_SOCK: /tmp/ssh-***/agent.***
    SSH_AGENT_PID: ***
  
Successfully parsed SCM credential from publish-profile format.
Using SCM credential for authentication, GitHub Action will not perform resource validation.
Successfully acquired app settings from function app (with SCM credential)!
Will archive . into /home/runner/work/_temp/temp_web_package_***.zip as function app content
Will use Kudu https://<scmsite>/api/zipdeploy to deploy since publish-profile is detected.
Setting SCM_DO_BUILD_DURING_DEPLOYMENT in Kudu container to true
Update using context.kuduService.updateAppSettingViaKudu
Response with status code 204
App setting SCM_DO_BUILD_DURING_DEPLOYMENT propagated to Kudu container
Setting ENABLE_ORYX_BUILD in Kudu container to true
Update using context.kuduService.updateAppSettingViaKudu
Response with status code 204
App setting ENABLE_ORYX_BUILD propagated to Kudu container
Package deployment using ZIP Deploy initiated.
Fetching changes.
Cleaning up temp folders from previous zip deployments and extracting pushed zip file /tmp/zipdeploy/***.zip (128.94 MB) to /tmp/zipdeploy/extracted
Error: Failed to deploy web package to App Service.
Error: Execution Exception (state: PublishContent) (step: Invocation)
Error:   When request Azure resource at PublishContent, zipDeploy : Failed to use /home/runner/work/_temp/temp_web_package_***.zip as ZipDeploy content
Error:     Package deployment using ZIP Deploy failed. Refer logs for more details.
Error: Deployment Failed!

本地执行func azure functionapp publish "func-app-name"命令可以正常完成部署,请问问题出在哪里?


排查与解决方案

以下是几个可能的原因及对应解决办法:

1. 本地构建与远程构建冲突

你同时在GitHub Actions中本地安装依赖,又开启scm-do-build-during-deployment和enable-oryx-build让Azure端重新构建,二者会产生冲突:

  • 本地安装的依赖会被打包进zip,传到Azure后Oryx构建可能覆盖或重复处理这些依赖,引发部署失败。
  • 解决办法:二选一:
    • 关闭远程构建:将scm-do-build-during-deployment和enable-oryx-build设为false,保留本地依赖安装步骤;
    • 保留远程构建:删除本地的Resolve Project Dependencies Using Pip步骤,让Oryx在Azure端自动安装依赖(确保requirements.txt在项目根目录)。

2. SSH密钥未传递到Azure构建环节

你在GitHub Actions runner中安装的SSH密钥,无法传递到Azure的Kudu构建容器中。如果requirements.txt包含需要SSH拉取的私有包,Azure端构建会因缺少密钥失败,但日志未明确显示该错误。

  • 解决办法:
    • 若保留远程构建:在Azure Function App的应用设置中配置SSH相关环境变量,或把私有包依赖改为HTTPS方式并配置访问令牌;
    • 若关闭远程构建:用GitHub Actions本地构建,此时SSH密钥在runner环境中生效,依赖安装完成后再打包部署。

3. 打包内容过大或包含冗余文件

日志显示zip包大小为128.94MB,可能包含.git、虚拟环境、测试文件等不必要内容,导致部署解压失败。

  • 解决办法:在项目根目录添加.funcignore文件,排除冗余内容,示例:
    .git/
    __pycache__/
    .venv/
    tests/
    *.pyc
    

4. Azure Functions Action版本兼容性问题

你使用的Azure/functions-action@v1版本较旧,可能存在兼容性问题。

  • 解决办法:升级到最新版本(如Azure/functions-action@v4),并根据官方文档调整配置参数。

5. 查看Kudu端详细日志

当前日志未提供具体错误细节,可通过Azure门户查看Kudu日志:

  • 进入Function App的「开发工具」-「高级工具」(Kudu);
  • 点击「Debug console」-「CMD」,查看D:\home\LogFiles\SiteExtensions\Kudu\或D:\home\LogFiles\Deployment\下的日志文件,获取更详细的错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:02:04