发布和下载管道项目

Azure DevOps Services

使用 Azure Pipelines,可以从管道的早期阶段或另一个管道下载项目。 还可以将项目发布到文件共享,或将其作为管道项目提供。

发布项目

可以使用 YAML、经典编辑器或 Azure CLI 发布项目:

注意

发布管道不支持发布管道项目。

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

注意

关键字 publish发布管道项目任务的 快捷方式。

虽然项目的名称是可选的,但最好指定准确反映项目内容的名称。 如果计划使用不同的 OS 上运行的作业中的项目,必须确保所有文件路径都对目标环境有效。 例如,包含字符 \* 无法在 Windows 上下载的文件名。

需要发布的文件/文件夹的路径。 这可以是绝对路径或相对路径 $(System.DefaultWorkingDirectory)

Azure Artifacts 中的包是不可变的。 发布包后,将永久保留其版本。 如果包已发布,重新运行失败的作业将失败。 如果希望能够重新运行失败的作业且 不存在错误包,最好是使用 条件 仅在上一个作业成功时运行。

  jobs:
  - job: Job1
    steps:
      - script: echo Hello Job1!

  - job: Job2
    steps:
      - script: echo Hello Job2!
    dependsOn: Job1

注意

不会为存储管道项目付费。 管道缓存也不受存储计费的豁免。 查看 哪些项目计入我的总计费存储

注意

删除管道运行将导致删除与该运行关联的所有项目。

使用 .artifactignore

.artifactignore 使用与 (类似的语法 .gitignore ,) ) 指定发布项目时应忽略哪些文件。 有关详细信息 ,请参阅使用 .artifactignore 文件

备注

URL 路径中不支持加号字符 + ,某些生成包类型的元数据(如 Maven)。

示例:忽略 除.exe 文件以外的所有文件:

**/*
!*.exe

重要

如果没有 .artifactignore 文件时,Azure Artifacts 会自动忽略 .git 文件夹路径。 可以通过创建一个空 的 .artifactignore 文件来绕过此目标。

下载项目

可以使用 YAML、经典编辑器或 Azure CLI 下载项目。

steps:
- download: current
  artifact: WebApp
  • current:下载当前管道运行生成的项目。 选项:当前、特定。

备注

已发布的项目列表仅在以下依赖作业中可用。 因此,仅在单独的作业中使用 current 选项,该作业依赖于具有发布项目任务的作业。

提示

可以使用 管道资源 在一个位置定义源,并在管道中的任何位置使用它。

注意

关键字 download下载管道项目 任务的快捷方式。

默认情况下,文件下载到 $ (Pipeline.Workspace) 。 如果未指定项目名称,则会为每个下载的项目创建一个子目录。 可以使用匹配模式来限制下载的文件。 有关更多详细信息 ,请参阅文件匹配模式

steps:
- download: current
  artifact: WebApp
  patterns: |
    **/*.js
    **/*.zip

项目选择

单个下载步骤可以下载一个或多个项目。 若要下载多个项目,请将 项目名称 字段留空,并使用文件匹配模式来限制将下载哪些文件。 ** 是默认文件匹配模式, (所有项目中的所有文件) 。

单个项目

指定项目名称时:

  1. 仅下载该特定项目的文件。 如果项目不存在,则任务将失败。

  2. 相对于项目的根目录计算文件匹配模式。 例如,模式 *.jar 将项目根目录的所有文件与 .jar 扩展名匹配。

以下示例演示如何从项目下载所有 *.js 内容 WebApp

steps:
- download: current
  artifact: WebApp
  patterns: '**/*.js'

多个项目

未指定项目名称时:

  1. 可以下载多个项目,如果未找到任何文件,则任务不会失败。

  2. 为每个项目创建一个子目录。

  3. 文件匹配模式应假定模式的第一段 (或匹配) 项目名称。 例如, WebApp/** 匹配项目中的所有文件 WebApp 。 模式 */*.dll 将所有文件 .dll 与每个项目的根目录处的扩展名匹配。

以下示例演示如何从所有项目下载所有 .zip 文件:

steps:
- download: current
  patterns: '**/*.zip'

发布和部署作业中的项目

项目仅在部署作业中自动下载。 默认情况下,项目将下载到 System.ArtifactsDirectory。 仅当在部署中使用 deploy 生命周期挂钩时,才会自动注入下载项目任务。 若要停止自动下载项目,请添加一个步骤 download 并将其值设置为 none。 在常规生成作业中,需要显式使用 download 步骤关键字或 下载管道项目 任务。 请参阅 生命周期挂钩 ,了解有关其他类型的挂钩的详细信息。

steps:
- download: none

跨阶段使用项目

如果想要能够在管道中的不同阶段访问项目,现在可以在一个阶段发布项目,然后在下一阶段利用依赖项下载它。 有关更多详细信息,请参阅 阶段到暂存依赖项

示例

在以下示例中,我们将将脚本文件夹从存储库复制并发布到该 $(Build.ArtifactStagingDirectory)存储库。 第二个阶段将下载并运行脚本。

trigger:
- main
stages:
- stage: build
  jobs:
  - job: run_build
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: CopyFiles@2
      displayName: 'Copy scripts'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.ArtifactStagingDirectory)'

    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish script'
      artifact: drop

- stage: test
  dependsOn: build
  jobs:
  - job: run_test
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    - task: PowerShell@2
      inputs:
        filePath: '$(Pipeline.Workspace)\drop\test.ps1'

显示 PowerShell 任务输出的屏幕截图

从生成项目迁移

管道项目是下一代生成项目,建议使用项目。 仍可使用下载生成项目下载使用发布生成项目发布的项目,但建议改用最新的下载管道项目任务。

从生成项目迁移到管道项目时:

  1. 默认情况下, 下载管道项目 任务会将文件下载到 $(Pipeline.Workspace)。 这是所有类型的项目的默认和建议路径。

  2. 下载生成项目任务的文件匹配模式应以 (开头,或者与项目名称) 匹配,而不管是否指定了特定项目。 在 “下载管道项目 ”任务中,指定项目名称时,模式不应包含项目名称。 有关详细信息,请参阅 单个项目选择

示例

- task: PublishPipelineArtifact@1
  displayName: 'Publish'
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)/**
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifactName: 'prod'
    ${{ else }}:
        artifactName: 'dev'
    artifactType: 'pipeline'

常见问题解答

问:什么是生成项目?

答:生成项目是生成生成的文件。 请参阅 生成项目 ,详细了解如何发布和使用生成项目。

问:是否支持将项目发布到共享文件夹?

答:目前不是,但此功能是计划的。

问:是否可以在重新运行失败的作业时删除管道项目?

答:管道项目不可删除或覆盖。 如果要在重新运行失败的作业时重新生成项目,可以在项目名称中包含作业 ID。 $(system.JobId) 是用于此目的的相应变量。 请参阅 系统变量 ,了解有关预定义变量的详细信息。