【问题标题】:Unable to copy artifacts from one stage to another stage in azure pipeline无法将工件从一个阶段复制到 Azure 管道中的另一个阶段
【发布时间】:2020-05-08 15:56:52
【问题描述】:

我有一个用于 nodejs 应用程序的多阶段 azure 构建管道。

在第一阶段,我正在构建源代码并将工件复制到暂存目录 (Build.ArtifactStagingDirectory),在 azure 构建管道的第三阶段,我正在尝试使用 PublishBuildArtifacts@1 发布工件任务。

但我收到以下警告:

目录 '/home/vsts/work/1/a' 为空。不会添加任何内容来构建工件“drop”。

我也尝试过 PipelineArtifacts 任务。

以下是构建管道概述。

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

这里是复制文件任务的日志。它正在将文件从源目录复制到暂存目录

下图显示了 PublishBuildArtifact 任务的日志

【问题讨论】:

  • 你能得到你的复制文件任务和日志吗?

标签: azure-devops azure-pipelines azure-pipelines-build-task


【解决方案1】:

无法在 azure 管道中将工件从一个阶段复制到另一个阶段

那是因为您在第一阶段复制文件,但在另一个阶段发布构建工件。

这两个阶段不在同一台机器上。

Microsoft 将在您每次使用一个阶段后回收代理并恢复它。之后,MS 将重新分配新代理到下一阶段。这就是为什么您将文件复制到相应的文件夹中,但发布时它是空的。因为它不在同一台机器上。

所以,要解决这个问题,我们必须在同一阶段使用复制文件任务和发布构建工件任务。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您有权访问 VSTS 代理,则可以查看构建文件夹(以检查构建是否正确)和 ArtifactStagingDirectory。

    【讨论】:

    • 是否可以访问 Microsoft 托管的代理?
    • Microsoft-hosted no,仅当您在本地服务器上有一个 VSTS 代理时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多