目前,我正在使用 az CLI 通过以下命令将我的机器人部署到 Azure:
az webapp deployment source config-zip --resource-group MY_RESOURCE_GROUP --name MY_RESOURCE_NAME --src MY_BOT_ZIP
我正在尝试从 Azure DevOps 管道部署机器人。这是我尝试过的:
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
- task: AzureWebApp@1
inputs:
azureSubscription: MY_SUBSCRIPTION
appType: webAppLinux
appName: MY_RESOUCE_NAME
package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
但是,这导致部署失败并出现以下错误:
Error: ENOENT: no such file or directory, stat '/home/site/wwwroot/node_modules/.bin/bunyan'
An error has occurred during web site deployment.
Kudu Sync failed
\n/opt/Kudu/Scripts/starter.sh "/home/site/deployments/tools/deploy.sh"
Deployment Failed. deployer = VSTS_ZIP_DEPLOY deploymentPath = ZipDeploy. Extract zip.
##[error]Failed to deploy web package to App Service.
##[warning]Can't find loc string for key: KuduStackTraceURL
##[error]KuduStackTraceURL https://...
##[error]Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
当我修改
ArchiveFiles@2
任务设置includeRootFolder: true
时,部署成功,但机器人没有运行。我相信这可能是由于额外文件夹导致的部署结构不正确。
我走在正确的道路上吗?有没有更好的方法来实现这个部署?
如果您可以使用 Azure CLI 成功部署应用程序,请尝试检查您在管道中部署的 zip 文件是否与使用 Azure CLI 部署的相同。
您可以添加一些步骤来检查 zip 文件中的内容。这是我的示例 yaml,通过添加脚本来列出文件夹
$(System.DefaultWorkingDirectory)
中的文件并将 zip 文件发布为管道工件。然后我们可以手动下载管道工件来检查文件。
- script: ls $(System.DefaultWorkingDirectory)
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
artifact: 'WebApp'
publishLocation: 'pipeline'
- task: AzureWebApp@1
inputs:
azureSubscription: 'MY_SUBSCRIPTION'
appType: 'webApp'
appName: 'MytestApp'
package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
deploymentMethod: 'auto'
顺便说一句,您还可以通过命令使用管道中的 Azure CLI 任务,而不是
AzureWebApp@1
任务。
- task: AzureCLI@2
inputs:
azureSubscription: 'MY_SUBSCRIPTION'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: 'az webapp deployment source config-zip --resource-group MY_RESOURCE_GROUP --name MY_RESOURCE_NAME --src MY_BOT_ZIP'
希望以上内容可以帮助您解决问题。