Azure / Azure/azure-cli

az webapp deploy fails with Kudu Sync error

Open
#30,955 7 comments 0 reactions 1 assignee Assigned to @tulikac View on GitHub
act-observability-squad app-service-deployment Auto-Assign Auto-Resolve bug customer-reported Possible-Solution Service Attention Similar-Issue Web Apps
Dominant language
Python
Stars
4.6k
Forks
3.5k
Avg merge
3d 2h
Merged PRs (30d)
60

Description

### Describe the bug

Created a Linux App Service plan, using:
```json
"kind": "linux",
"sku": {
"capabilities": null,
"capacity": 1,
"family": "B",
"locations": null,
"name": "B3",
"size": "B3",
"skuCapacity": null,
"tier": "Basic"
},
```

Having set some variables, created a Web App using:
```ps1
az webapp create --name "$app_name" `
--resource-group "$resource_group" `
--plan "$plan" `
--runtime "python:3.11" `
--startup-file startup.txt
```

Attempted to deploy the web app using:
```
az webapp deploy --name $app_name `
--resource-group $resource_group `
--src-path ./app.zip `
--clean
```

The build fails, since the Python code in `app.zip` includes one or more subdirectories. After some investigation on the App Service Plan, the deployment process tries to create directories with a backslash. This does not work on Linux. The result is that

```
routes/some_route.py
```

becomes

```
routes\some_route.py
```

which is a single file on Linux. The `routes` directory is not created. If all subdirectories are removed, the deployment works. If one or more subdirectories are included, Kudu fails to create them and the deployment crashes. Kudu appears to be using a non-portable mechanism for creating directories that may work on Windows but does not work on Linux.

### Related command

az webapp deploy

### Errors

```
2025-02-13T22:43:07 Clean deploying to /home/site/wwwroot
2025-02-13T22:43:07 Generating deployment script.
2025-02-13T22:43:07 Using cached version of deployment script (command: 'azure -y --no-dot-deployment -r "/tmp/zipdeploy/extracted" -o "/home/site/deployments/tools" --basic --sitePath "/tmp/zipdeploy/extracted"').
2025-02-13T22:43:07 Running deployment command...
2025-02-13T22:43:07 Command: "/home/site/deployments/tools/deploy.sh"
2025-02-13T22:43:07 Handling Basic Web Site deployment.
2025-02-13T22:43:07 Kudu sync from: '/tmp/zipdeploy/extracted' to: '/home/site/wwwroot'
2025-02-13T22:43:07 Copying file: 'DigiCertGlobalRootCA.crt.pem'
2025-02-13T22:43:07 Copying file: 'data\Directions.csv'
2025-02-13T22:43:07 Copying file: 'dbutils.py'
2025-02-13T22:43:07 Copying file: 'fileutils.py'
2025-02-13T22:43:07 Copying file: 'models.py'
2025-02-13T22:43:07 Error: EINVAL: invalid argument, open '/home/site/wwwroot/data\Directions.csv'
2025-02-13T22:43:07 An error has occurred during web site deployment.
2025-02-13T22:43:07 Kudu Sync failed
```

The error message is collected by tailing the Web App log during the deployment process.

### Issue script & Debug output

Too much sensitive information.

### Expected behavior

The web app should deploy correctly, such that the directories that are within the .zip file are created on the App Service Plan.

### Environment Summary

```
azure-cli 2.69.0 *

core 2.69.0 *
telemetry 1.1.0

Extensions:
application-insights 1.2.2

Dependencies:
msal 1.31.2b1
azure-mgmt-resource 23.1.1
```

### Additional context

When the web app is run locally or using Docker, it works as normal. It is possible to deploy it to the Linux App Service Plan using a Docker image, whereas the zip deployment fails as noted in this bug report.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.