Azure Build Pipeline构建Angular时dist文件夹生成后被删除问题咨询
解决Azure Build Pipeline中Angular构建dist文件夹无法发布的问题
我来帮你排查并解决这个问题,核心原因主要有两个:一是发布路径指向错误,二是默认工作目录的机制导致你没拿到正确的文件。
问题分析
- 发布路径不对:你当前
PublishPipelineArtifact@1任务的targetPath设为$(Pipeline.Workspace)/s,这个目录是Azure Pipeline同步源代码的初始目录,而ng build --prod生成的dist文件夹是在项目根目录(对应变量$(Build.SourcesDirectory))下,所以你的发布任务根本没去读取dist文件夹,自然只会复制源代码。 - 潜在的目录清理风险:部分Pipeline任务执行时会自动清理临时目录,但最关键的还是你没指向正确的文件位置。
解决方案
方案1:直接发布dist文件夹
修改PublishPipelineArtifact@1任务的targetPath为dist文件夹的实际路径。默认情况下Angular构建会在项目根目录生成dist,所以用$(Build.SourcesDirectory)/dist即可;如果你的Angular项目有自定义项目名称(比如执行ng build --prod --project=my-app),路径要加上项目名:$(Build.SourcesDirectory)/dist/my-app。
修改后的完整管道配置:
trigger: - master pool: default steps: - task: NodeTool@0 inputs: versionSpec: '10.x' displayName: 'Install Node.js' - script: | npm install -g @angular/cli npm install ng build --prod displayName: 'npm install and build' - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.SourcesDirectory)/dist' # 指向正确的dist路径 artifactName: 'angular-dist' # 自定义artifact名称,方便后续识别 publishLocation: 'pipeline'
方案2:先复制dist到Pipeline工作区再发布(更稳妥)
如果担心构建目录被意外清理,可以先把dist复制到$(Pipeline.Workspace)目录(这个是Pipeline的安全工作区,不会被自动清理),再执行发布:
trigger: - master pool: default steps: - task: NodeTool@0 inputs: versionSpec: '10.x' displayName: 'Install Node.js' - script: | npm install -g @angular/cli npm install ng build --prod displayName: 'npm install and build' - task: CopyFiles@2 inputs: SourceFolder: '$(Build.SourcesDirectory)/dist' TargetFolder: '$(Pipeline.Workspace)/dist' CleanTargetFolder: true displayName: 'Copy dist to Pipeline workspace' - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Pipeline.Workspace)/dist' artifactName: 'angular-dist' publishLocation: 'pipeline'
额外检查点
- 确认
ng build --prod命令执行成功:在Pipeline的日志里查看构建步骤的输出,确认dist文件夹已正常生成。 - 若你的Angular版本较新,
ng build --prod已被ng build --configuration production替代,不过旧版本的--prod参数仍然有效。
内容的提问来源于stack exchange,提问作者2cool4school
相关产品推荐
相关产品推荐

