使用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
相关产品推荐
相关产品推荐

