为了简短起见,我有一个像这样在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应用程序,因此可以找到(压缩)伪代码并进行部署。
实际上可以保存并运行构建。虽然错误 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:看来删除 今天晚些时候(这里晚上两点)必须检查这个问题。 - task: PublishPipelineArtifact@0
inputs:
artifactName: 'drop'
targetPath: '$(Build.ArtifactStagingDirectory)/build'
/build
可以解决问题。感觉有点奇怪,因为这是本地生产的。它不会产生发布作业所需的zip文件,即Azure App Service Deploy。
答案 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)'
感觉这也许可以简化,但是现在可以使用并且很灵活。