我有一个简单的 web.api,我想将其部署到 azure。我为此使用 github actions。
如果我使用 azure/webapps-deploy@v2
步骤,一切都会顺利进行。
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact from build job
# published previously via `dotnet publish` and
# uses: actions/upload-artifact@v3
# with:
# name: webapp
uses: actions/download-artifact@v3
with:
name: webapp
path: webapp
- name: Login via Azure CLI
uses: azure/login@v1
with:
# secret in json form are added into repository settings
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy web app
id: deploywebapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: webapp
我可以部署应用程序,然后可以通过 https://%AZURE_WEBAPP_NAME%.azurewebsites.net/swagger/index.html 访问它。现在,我想使用普通的 azure CLI 命令并替换上述步骤(我所做的唯一更改):
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: webapp
path: webapp
- name: Azure Login
uses: azure/CLI@v1
with:
azcliversion: 2.30.0
inlineScript: |
az login --service-principal \
-u ${{ secrets.DEPLOYMENT_AZURE_CLIENT_ID }} \
-p ${{ secrets.DEPLOYMENT_AZURE_CLIENT_SECRET }} \
-t ${{ secrets.DEPLOYMENT_AZURE_TENANT_ID }}
- name: Deploy to Azure WebApp
uses: azure/CLI@v1
with:
azcliversion: 2.30.0
inlineScript: |
zip -r webapp.zip .
az webapp deployment source config-zip --resource-group ${{ env.AZURE_WEBAPP_RG }} --name ${{ env.AZURE_WEBAPP_NAME }} --src "webapp.zip"
此步骤也不会失败,但已部署的应用程序无法访问(使用先前的 url)并返回 404 错误。部署步骤输出为:
WARNING: Getting scm site credentials for zip deployment
WARNING: Starting zip deployment. This operation can take a while to complete ...
WARNING: Deployment endpoint responded with status code 202
{
"active": true,
"author": "N/A",
"author_email": "N/A",
"build_summary": {
"errors": [],
"warnings": []
},
"complete": true,
"deployer": "Push-Deployer",
"end_time": "..",
"id": "..",
"is_readonly": true,
"is_temp": false,
"last_success_end_time": "..",
"log_url": "https://%AZURE_WEBAPP_NAME%.scm.azurewebsites.net/api/deployments/latest/log",
"message": "Created via a push deployment",
"progress": "",
"received_time": "..",
"site_name": "%AZURE_WEBAPP_NAME%",
"start_time": "...",
"status": 4,
"status_text": "",
"url": "https://%AZURE_WEBAPP_NAME%.scm.azurewebsites.net/api/deployments/latest"
}
az script ran successfully.
这两个步骤有什么区别?
UPDATE1:我已将 --debug
参数添加到 az webapp deployment ..
命令,并且在详细信息中没有看到任何错误或失败输出
UPDATE2:当我 ssh
到 Azure 服务器时,我看到了所需的文件:
root@..:~/site/wwwroot/webapp# ls
DeploymentTemplates Swashbuckle.AspNetCore.SwaggerGen.dll WebApiDemo.deps.json WebApiDemo.runtimeconfig.json web.config
Microsoft.OpenApi.dll Swashbuckle.AspNetCore.SwaggerUI.dll WebApiDemo.dll appsettings.Development.json
Swashbuckle.AspNetCore.Swagger.dll WebApiDemo
UPDATE3:看起来这可能与以下事实有关:当我使用普通 CLI 命令时,实际生成的文件会放置得更深一层(请参阅之前的 ssh 输出并注意 webapp
文件夹)。在正确部署的应用程序中,部署的文件放置在 wwwroot
的根目录中:
root@..:~/site/wwwroot# ls
DeploymentTemplates Swashbuckle.AspNetCore.SwaggerGen.dll WebApiDemo.deps.json WebApiDemo.runtimeconfig.json web.config
Microsoft.OpenApi.dll Swashbuckle.AspNetCore.SwaggerUI.dll WebApiDemo.dll appsettings.Development.json
Swashbuckle.AspNetCore.Swagger.dll WebApiDemo
最佳答案
这两个任务之间的主要区别是 azure/web-apps-deploy@v2
正在将文件复制到底层存储到 home/site/wwwroot
其中az webapp deployment config-zip
将 zip 文件复制到 home/data/SitePackages
。如果您有WEBSITE_RUN_FROM_PACKAGE="1"
,那么平台会将zip文件挂载在 SitePackages
中作为home/site/wwwroot
目录,否则,将提取 zip 文件的内容,类似于 azure/web-apps-deploy@v2
确实如此。
diagnostic logs将帮助确定导致您的应用出现 404 错误的原因。根据您提供的信息;我会确保 zip 命令实际上从 actions/download-artifact@v3
压缩正确的工件。 。由于您正在压缩根目录,因此您可能会压缩文件夹而不是构建的二进制文件。
关于azure - 带有 "az webapp deployment source config-zip"的部署 Azure Web 应用程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76467930/