Невозможно скопировать артефакты из одной стадии в другую в конвейере azure - PullRequest
0 голосов
/ 22 января 2020

У меня есть многоступенчатый конвейер сборки azure для приложения nodejs.

На первом этапе я собираю исходный код и копирую артефакты в промежуточный каталог (Build.ArtifactStagingDirectory) и на третьем этапе конвейера сборки azure я пытаюсь опубликовать sh артефактов, используя задачу PublishBuildArtifacts@1.

Но я получаю следующее предупреждение:

Каталог '/ home / vsts / work / 1 / a' пуст. Ничего не будет добавлено к артефакту сборки "drop".

Я также пытался выполнить задачу PipelineArtifacts.

Ниже приведен обзор конвейера сборки. enter image description here

azure -pipelines.yml

trigger:
- master
- feature

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: BuildApplication
  jobs:
  - job: InstallNodejs
    steps:
    - task: NodeTool@0
      inputs: 
        versionSpec: '10.x'
      displayName: 'Step for installing Node.js'

  - job: PrepareSonarCloud
    steps:
    - task: SonarCloudPrepare@1
      inputs:
        SonarCloud: ******
        organization: ****
        scannerMode: 'CLI'
        configMode: 'manual'
        cliProjectKey: ******
        cliProjectName: ******
        cliSources: '.'
      condition: |
        and
        (
          succeeded(),
          eq(variables['Build.Reason'], 'Pull Request'),
          eq(variables['System.PullRequest.TargetBranch'], 'master')
        )

  - job: BuildNodejs
    steps:
      - script: |
          npm install
          npm run build
        displayName: 'npm install and build'

  - job: CopyFiles
    steps:
    - task: CopyFiles@2
      inputs:
        sourceFolder: $(Build.SourcesDirectory)
        targetFolder: $(Build.ArtifactStagingDirectory)
      displayName: Copy Files to Staging Directory

- stage: StaticCodeAnalysis
  jobs:
  - job: AnalyzeSonarcloud
    steps:
    - task: SonarCloudAnalyze@1
      displayName: 'Run SonarCloud code analysis'
      condition: |
        and 
        (
          succeeded(),
          eq(variables['Build.Reason'], 'Pull Request'),
          eq(variables['System.PullRequest.TargetBranch'], 'master')
        )

  - job: PublishCodeAnalysisReport
    steps:
    - task: SonarCloudPublish@1
      displayName: 'Publish SonarCloud quality gate results'
      inputs:
        pollingTimeoutSec: '300'
      condition: |
        and
        (
          succeeded(),
          eq(variables['Build.Reason'], 'Pull Request'),
          eq(variables['System.PullRequest.TargetReason'], 'master')
        )

- stage: UploadArtifact
  jobs:
  - job: PublishBuildArtifact
    steps:
    - task: PublishBuildArtifacts@1  
      inputs: 
        pathtoPublish: $(Build.ArtifactStagingDirectory) 
        artifactName: drop

Вот журнал задач для копирования файлов. Он копирует файлы из исходного каталога в промежуточный каталог

Here is the log for copy files task. It's copying the files from source directory to staging directory

На рисунке ниже показан журнал для задачи PublishBuildArtifact

image shows the log for PublishBuildArtifact task

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Невозможно скопировать артефакты с одного этапа на другой в azure конвейер

Это потому, что вы копируете файл на первом этапе, но публикуете sh сборка артефактов в другой этап.

Эти два этапа находятся не на одном компьютере.

Microsoft будет перезапускать агент и восстанавливать его после каждого использования одного этапа. После этого MS переназначит нового агента на следующий этап . Вот почему вы скопировали файл в соответствующую папку, но он был пуст при публикации. Поскольку он не на том же компьютере.

Итак, чтобы решить эту проблему, мы должны использовать задачу копирования файла и задачу сборки артефактов publi sh на одном этапе.

Надеюсь, что это помогает.

0 голосов
/ 22 января 2020

Если у вас есть доступ к агенту VSTS, вы можете просмотреть папку сборки (чтобы проверить, была ли сборка выполнена правильно) и ArtifactStagingDirectory.

...