如何将“普通React” / node应用程序的构建结果与发布管道链接

时间:2019-01-25 22:24:29

标签: azure azure-devops

为了简短起见,我有一个像这样在Azure DevOps Build Pipeline上构建的React应用程序

trigger:
  - Release

queue:
  name: Hosted
  demands: npm

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

- script: |
  npm ci
  npm run build
  displayName: 'Do npm ci and build'

这也可以完成本地构建。本地生成的结果转到build目录(未压缩)。

现在,当我尝试创建发布管道时,使用Azure Deploy Web Service任务找不到工件。

如果我尝试将PublishPipelineArtifact@0添加到构建管道中以创建发布,则YAML编辑器只会告诉字符串与模式不匹配... ,并且不允许保存定义

我想我应该压缩生成的build目录的内容,但是正确的方法是什么?另外,使用Azure App Service Deploy任务是部署Azure WebApp的正确方法吗?它适用于ASP.NET Core应用程序,因此可以找到(压缩)伪代码并进行部署。

- task: PublishPipelineArtifact@0
  inputs:
  artifactName: 'drop'
  targetPath: '$(Build.ArtifactStagingDirectory)/build'

实际上可以保存并运行构建。虽然错误

  

2019-01-25T22:42:27.6896518Z ## [section]开始于:   发布PipelineArtifact 2019-01-25T22:42:27.6898909Z   ================================================== ============================ 2019年1月25日T22:42:27.6898962Z任务:发布管道工件   2019-01-25T22:42:27.6899006Z说明:发布管道工件   2019-01-25T22:42:27.6899034Z版本:0.139.0   2019-01-25T22:42:27.6899062Z作者:Microsoft Corporation   2019-01-25T22:42:27.6899090Z帮助:发布本地目录   或文件作为当前管道的命名工件。   2019-01-25T22:42:27.6899137Z   ================================================== ============================ 2019年1月25日T22:42:28.0499917Z ## [错误]路径不存在:D:\ a \ 1 \ a \ build   2019-01-25T22:42:28.0708878Z ## [section]完成:   PublishPipelineArtifact

<编辑2:看来删除/build可以解决问题。感觉有点奇怪,因为这是本地生产的。它不会产生发布作业所需的zip文件,即Azure App Service Deploy。

今天晚些时候(这里晚上两点)必须检查这个问题。

1 个答案:

答案 0 :(得分:0)

还有另一个问题:该脚本仅运行npm ci,没有运行构建部分。将其分为两个不同的步骤会有所不同。如果我想将结果压缩到暂存区域,在这种情况下,PublishPipelineArtifact@0似乎不是理想的选择。

当前有效的解决方案似乎是

resources:
- repo: self

trigger:
- Release

queue:
  name: Hosted
  demands: npm

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

- script: |
  npm ci    
  displayName: 'npm ci'

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

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)/build'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/artifact.zip'
    replaceExistingArchive: true


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'

感觉这也许可以简化,但是现在可以使用并且很灵活。