发布和下载管道项目
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
项目选择
单个下载步骤可以下载一个或多个项目。 若要下载多个项目,请将 项目名称 字段留空,并使用文件匹配模式来限制将下载哪些文件。 ** 是默认文件匹配模式, (所有项目中的所有文件) 。
单个项目
指定项目名称时:
仅下载该特定项目的文件。 如果项目不存在,则任务将失败。
相对于项目的根目录计算文件匹配模式。 例如,模式
*.jar将项目根目录的所有文件与.jar扩展名匹配。
以下示例演示如何从项目下载所有 *.js 内容 WebApp:
多个项目
未指定项目名称时:
可以下载多个项目,如果未找到任何文件,则任务不会失败。
为每个项目创建一个子目录。
文件匹配模式应假定模式的第一段 (或匹配) 项目名称。 例如,
WebApp/**匹配项目中的所有文件WebApp。 模式*/*.dll将所有文件.dll与每个项目的根目录处的扩展名匹配。
以下示例演示如何从所有项目下载所有 .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'
从生成项目迁移
管道项目是下一代生成项目,建议使用项目。 仍可使用下载生成项目下载使用发布生成项目发布的项目,但建议改用最新的下载管道项目任务。
从生成项目迁移到管道项目时:
默认情况下, 下载管道项目 任务会将文件下载到
$(Pipeline.Workspace)。 这是所有类型的项目的默认和建议路径。下载生成项目任务的文件匹配模式应以 (开头,或者与项目名称) 匹配,而不管是否指定了特定项目。 在 “下载管道项目 ”任务中,指定项目名称时,模式不应包含项目名称。 有关详细信息,请参阅 单个项目选择。
示例
- 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) 是用于此目的的相应变量。 请参阅 系统变量 ,了解有关预定义变量的详细信息。
添加“发布管道项目”任务。
添加“下载管道项目”任务。