【问题标题】:Azure DevOps First Time Web App Deployment Always Gives ErrorAzure DevOps 首次 Web 应用部署总是出错
【发布时间】:2021-01-11 13:33:45
【问题描述】:

我正面临这种奇怪的情况。我有以下设置。

  • 使用 create-react-app 创建的 React JS 应用
  • GitHub 上的代码
  • Azure Web 应用 - 从 Azure 门户创建。
  • Azure DevOps + Pipelines + YAML

这周我做了很多部署,我注意到了这种情况。 每次第一次部署,在 wwwroot 文件夹中总是会出现以下情况。

但是,每个后续部署都可以正常工作。

复制

  • 使用 create-react-app 创建新应用
  • 放到 GitHub 上
  • 将 GitHub 存储库与 Azure DevOps Pipelines 链接
  • 将管道定位到要部署到全新创建的 Azure Web 应用程序。

初始部署总是会失败,如上图所示。请记住,后续部署不会失败。

那么,问题是,我能做些什么来防止这种情况发生吗?

我计划在 Azure 上自动创建资源以及自动部署。

更新 1

根据评论,包括我的 YAML。我在我所有的 react JS 部署中都使用了它,它显示了与上面相同的问题。

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'


- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'



- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'


- task: PublishBuildArtifacts@1
  inputs: 
    pathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
    ArtifactName: 'www' # output artifact named www

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/build/'
    includeRootFolder: false


- task: AzureWebApp@1
  inputs:
    azureSubscription: 'ReactJSRecipeAppConnection'
    appName: 'ReactJSRecipeAppSep232020'
    package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 

【问题讨论】:

  • 可能超时了?喜欢安装一些依赖项并完成,但是安装超时然后第二次安装不需要这样做,因此不会超时
  • 我真的不这么认为。这周我一定部署了大约六个站点。每次都持续不断的情况。我不敢相信我创建的每个网站每次都超时。这些文件根本不会进入 wwwroot 文件夹。我认为,在管道中的某个地方,配置文件没有正确创建。这可能是 azure-devops 的工作方式。
  • 为什么第二次会起作用?
  • 这就是我希望找到的 :) 现在,我只是每次都触发第二次部署来克服这个问题。代码,YAML 管道,没有任何改变。
  • @Jay 请分享 YAML 管道并将变量 system.debug 设置为 true 以获取详细日志。

标签: azure azure-devops azure-web-app-service


【解决方案1】:

FAILED TO INITIALIZE RUN FROM PACKAGE 通常表示 zip 文件已损坏或无法放气。请检查应用服务->应用设置下WEBSITE_RUN_FROM_PACKAGE标志是否设置。

另外,尽量使用任务Azure App Service deployv4,而不是任务Azure Web Appv1。

【讨论】:

  • 如果包损坏,为什么同一个应用的相同 YAML 配置在第二次部署时工作正常?我没有在这些部署之间更改应用程序设置,也没有对代码进行任何更改。我所做的只是在项目的任何地方添加注释行,触发第二次立即部署。
  • 我将尝试部署 Azure 应用服务,看看是否能得到更好的结果 :)
  • 您的问题进展如何?
  • 西西,你好。我已经标记本周进入这个。为了测试这个解决方案,我将至少投入几个小时。请期待本周末的更新。目前,我们通过简单地触发第二次部署(最多需要几秒钟)来进行管理,并且相处得很好。
  • 我今天已经安排了时间来调查这个问题。请期待我的更新,几小时后。
【解决方案2】:

从与@Cece Dong 的讨论开始,这就是最终对我有用的方法。

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'

- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs: 
    pathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
    ArtifactName: 'www' # output artifact named www

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/build/'
    includeRootFolder: false

- task: AzureRMWebAppDeployment@4
  inputs:
    appType: webApp    
    azureSubscription: 'RandomStuffReactJSConnection'
    WebAppName: 'randomstuffreactjsappsept24'
    package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 

我可以确认,上述内容不再需要第二次触发才能正确部署。

具体来说,'AzureRMWebAppDeployment@4' 的使用解决了原来的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2021-01-25
    相关资源
    最近更新 更多