почему конвейер сборки azure не создает папку dist для сборки angular

Похоже, что папка, которая создается во время сборки, удаляется до того, как я смогу запустить любую другую папку с задачами dist.

 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'
    
    #i added this task and it seems like the node_modules and the dist 
    #folder that was generated during the build are not getting copied to the (a)directory 
    #only the source code get copied. it seems like the folders are getting
    #deleted even before the #PublishPipelineArtifact@1 task ran
    
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Pipeline.Workspace)/s'
        publishLocation: 'pipeline'

Я также пытаюсь вывести сборку в

3 ответа

Во-первых, отдельно npm installскрипт со скриптом. Во-вторых, я бегал npm build вместо того ng build. Мне потребовалось несколько часов, чтобы заметить. Это решило проблему отсутствия создания моей папки dist.

      - script: |
    npm install
  displayName: 'npm install'

- script: |
    ng build --prod
  displayName: 'ng build'

У меня была такая же проблема, когда мне не удалось найти папку dist, но, похоже, мне не хватало только ./ перед dist в задаче CopyFiles@2 .

Ниже приведен рабочий конвейер сборки для ветки dev/main приложения angular.

      trigger:
- main
- dev

pool:
  vmImage: ubuntu-latest

jobs:
  - job: 'Dev_build'
    condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/dev'))
    steps:
    - task: NodeTool@0
      inputs:
        versionSpec: '16.x'
      displayName: 'Install Node.js'

    - script: |
        npm install -g @angular/cli
        npm install
        ng build --configuration test
      displayName: 'npm install and build'

  # Used to diagnostic the file structure
  #  - task: Bash@3
  #    inputs:
  #      targetType: 'inline'
  #      script: 'find -name node_modules -prune -o -print'
  
    - task: CopyFiles@2
      inputs:
        SourceFolder: './dist'
        Contents: '**'
        TargetFolder: '$(build.artifactstagingdirectory)'

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


  - job: 'Prod_build'
    condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
    steps:
    - task: NodeTool@0
      inputs:
        versionSpec: '16.x'
      displayName: 'Install Node.js'

    - script: |
        npm install -g @angular/cli
        npm install
        ng build --configuration --production
      displayName: 'npm install and build'

    - task: CopyFiles@2
      inputs:
        SourceFolder: './dist'
        Contents: '**'
        TargetFolder: '$(build.artifactstagingdirectory)'

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

Pipeline.Workspace относится к /home/vsts/work/1 находится ли ваш исходный код в c:\agent_work\1\s (System.DefaultWorkingDirectory). Итак, если ваш проект находится непосредственно в вашей корневой папке, вы сможете опубликовать папку dist, используя это:

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(System.DefaultWorkingDirectory)/dist'

Также обратите внимание, что PublishPipelineArtifact@1 не имеетpublishLocationсвойство. Напротив, PublishBuildArtifacts@1 имеет.

Другие вопросы по тегам