Publish and download Universal Packages with Azure Pipelines
Azure DevOps Services
Universal Packages allow you to package any number of files of any type and share them with your team. Using the Universal Package task in Azure Pipelines, you can pack, publish, and download packages of various sizes, up to 4 TB. Each package is uniquely identified with a name and a version number. You can use Azure CLI or Azure Pipelines to publish and consume packages from your Artifacts feeds.
Note
Universal Packages are only available in Azure DevOps Services.
Copy files
The Universal Packages task in Azure Pipelines is set to use $(Build.ArtifactStagingDirectory)
as the default publish directory. To ready your Universal Package for publishing, move the files you wish to publish to that directory. You can also use the Copy Files utility task to copy those files to the publish directory.
Publish a Universal Package
To publish a Universal Package to your Azure Artifacts feed, add the following task to your pipeline's YAML file.
- task: UniversalPackages@0
displayName: Publish a Universal Package
inputs:
command: publish
publishDirectory: '$(Build.ArtifactStagingDirectory)'
vstsFeedPublish: '<projectName>/<feedName>'
vstsFeedPackagePublish: '<Package name>'
packagePublishDescription: '<Package description>'
Argument | Description |
---|---|
publishDirectory | Location of the files you wish to publish. |
vstsFeedPublish | The project and feed name to publish to. If you're working with an organization-scoped feed, specify only the feed name. |
vstsFeedPackagePublish | The package name. Must be lower case. Use only letters, numbers, and dashes. |
packagePublishDescription | Description of the package content. |
To publish packages to an Azure Artifacts feed from your pipeline, the pipeline identity must have the Feed Publisher (Contributor) role on the feed. For more information, see Pipelines permissions.
To publish to an external feed, you must first create a service connection to authenticate with your feed. For more information, see Manage service connection.
Package versioning
Universal Packages follow the semantic versioning specification and can be identified by their names and version numbers. Semantic version numbers are composed of three numeric components, Major, Minor, and Patch, in the format: Major.Minor.Patch
.
The minor version number is incremented when new features are added that are backward compatible with previous versions, in this case, you increment the minor version and reset the patch version to 0 (1.4.17
to 1.5.0
). The major version number is incremented when there are significant changes that could break compatibility with previous versions. In this case, you increment the major version and reset the minor and patch versions to 0 (2.6.5
to 3.0.0
). The patch version number should be incremented when only bug fixes or other small changes are made that don't affect compatibility with previous versions (1.0.0
to 1.0.1
).
When publishing a new package, the Universal Packages task will automatically select the next major, minor, or patch version for you.
To enable versioning for your package, add a versionOption
input to your YAML file. The options for publishing a new package version are: major
, minor
, patch
, or custom
.
Selecting custom
enables you to manually specify your package version. The other options get the latest package version from your feed and increment the chosen version segment by 1. So if you have a testPackage 1.0.0, and select the major option, your new package will be testPackage 2.0.0. If you select the minor option, your package version will be 1.1.0, and if you select the patch option, your package version will be 1.0.1.
If you choose the custom
option, you must also specify a versionPublish
value as follows:
- task: UniversalPackages@0
displayName: Publish a Universal Package
inputs:
command: publish
publishDirectory: '$(Build.ArtifactStagingDirectory)'
vstsFeedPublish: '<projectName>/<feedName>'
vstsFeedPackagePublish: '<Package name>'
versionOption: custom
versionPublish: '<Package version>'
packagePublishDescription: '<Package description>'
Argument | Description |
---|---|
publishDirectory | Location of the files you wish to publish. |
vstsFeedPublish | The project and feed name to publish to. If you're working with an organization-scoped feed, specify only the feed name. |
vstsFeedPackagePublish | The package name. Must be lower case. Use only letters, numbers, and dashes. |
versionOption | Select a versioning strategy. Options: major , minor , patch , custom . |
versionPublish | The custom package version. |
packagePublishDescription | Description of the package content. |
Download a Universal Package
To download a Universal Package from a feed in your organization, use the Universal Package task with the download
command as follows:
steps:
- task: UniversalPackages@0
displayName: Download a Universal Package
inputs:
command: download
vstsFeed: '<projectName>/<feedName>'
vstsFeedPackage: '<packageName>'
vstsPackageVersion: '<packageVersion>'
downloadDirectory: '$(Build.SourcesDirectory)\someFolder'
Argument | Description |
---|---|
vstsFeed | The Artifacts feed hosting the package to be downloaded. |
vstsFeedPackage | Name of the package to be downloaded. |
vstsPackageVersion | Version of the package to be downloaded. |
downloadDirectory | The package destination folder. Default value: $(System.DefaultWorkingDirectory). |
To download a Universal Package from an external source, use the following snippet:
steps:
- task: UniversalPackages@0
displayName: Download a Universal Package
inputs:
command: download
feedsToUse: external
externalFeedCredentials: 'MSENG2'
feedDownloadExternal: 'fabrikamFeedExternal'
packageDownloadExternal: 'fabrikam-package'
versionDownloadExternal: 1.0.0
Argument | Description |
---|---|
feedsToUse | Set the value to external when downloading from an external source. |
externalFeedCredentials | Name of the service connection to the external feed. For more information, see manage service connections. |
feedDownloadExternal | Name of the external feed. |
packageDownloadExternal | The package name you wish to download. |
versionDownloadExternal | The version of the package you wish to download. |
Tip
You can use wildcards to download the latest version of a Universal Package. For more information, see Download the latest version.