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

Azure Pipeline部署失败:修改文件权限时出错

解决Azure Pipeline ZIP部署App Service时的文件权限错误(Error 124)

核心错误分析

部署日志明确提示 Error in changing file permissions : 124,这是ZIP部署过程中Kudu尝试修改文件/目录权限时触发的错误,通常和目标目录权限锁定、部署包内特殊权限文件、App Service运行环境限制有关。

排查与修复步骤

  • 检查部署包内的文件权限配置
    构建生成的ZIP包中如果包含带有特殊权限(如Linux下的SUID/SGID位)的文件,Kudu在解压后尝试修改权限时会失败。可以在构建阶段添加步骤,清理这类特殊权限:

    # Linux/macOS构建环境,递归移除SUID/SGID位
    chmod -R u-s,g-s $(Build.ArtifactStagingDirectory)
    

    或者在Windows环境下,通过PowerShell重置权限:

    Get-ChildItem $(Build.ArtifactStagingDirectory) -Recurse | ForEach-Object { $_.Attributes = $_.Attributes -band (-bnot [System.IO.FileAttributes]::ReadOnly) }
    
  • 启用App Service的“从ZIP运行”模式
    跳过解压和权限修改步骤,直接从ZIP包运行应用。在Azure Portal的App Service配置中,开启常规设置里的从包运行选项,或者在Pipeline的Azure App Service部署任务中添加参数:

    - task: AzureWebApp@1
      inputs:
        azureSubscription: 'Your-Subscription'
        appName: 'app-dev-django'
        package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
        runtimeStack: 'PYTHON|3.9'
        startUpCommand: 'gunicorn --bind=0.0.0.0 --workers=4 myapp.wsgi'
        enableCustomDeployment: true
        deploymentMethod: 'zipDeploy'
        deployFromZip: true # 启用从ZIP运行
    
  • 手动清理App Service的目标目录
    通过App Service的高级工具(Kudu控制台)进入site/wwwroot目录,手动删除现有文件后重新部署。或者在Pipeline中添加前置任务,调用Kudu API清空目录:

    # 使用curl调用Kudu API删除wwwroot目录下所有内容
    curl -X DELETE -u "$(app-username):$(scm-password)" https://<app-name>.scm.azurewebsites.net/api/vfs/site/wwwroot/
    

    注:<app-name>替换为你的App Service名称,$(app-username)和$(scm-password)可从App Service的发布配置文件中获取。

  • 检查App Service的文件系统锁定
    如果应用进程正在占用某些文件,会导致Kudu无法修改权限。可以在部署前添加步骤,停止App Service,部署完成后再启动:

    - task: AzureAppServiceManage@0
      inputs:
        azureSubscription: 'Your-Subscription'
        Action: 'Stop Azure App Service'
        WebAppName: 'app-dev-django'
    
    # 部署任务...
    
    - task: AzureAppServiceManage@0
      inputs:
        azureSubscription: 'Your-Subscription'
        Action: 'Start Azure App Service'
        WebAppName: 'app-dev-django'
    
  • 切换部署方法至Web Deploy
    放弃ZIP Deploy,改用Web Deploy方式,避免权限修改环节的冲突。在Pipeline中修改部署任务为:

    - task: AzureWebApp@1
      inputs:
        azureSubscription: 'Your-Subscription'
        appName: 'app-dev-django'
        package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
        deploymentMethod: 'webDeploy'
    

额外提示

如果以上方法无效,可通过App Service高级工具访问Kudu的详细追踪日志(LogFiles/kudu/trace目录),里面会包含权限修改失败的具体文件路径,针对性处理该文件的权限配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:05:29