Azure DevOps universal packages are currently in public preview as you can read here: https://docs.microsoft.com/en-us/azure/devops/artifacts/quickstarts/universal-packages?view=vsts&tabs=azuredevops
“Universal Packages store one or more files together in a single unit that has a name and version.” This kind of artifact is perfect to store binary (platform) update of MsDyn365FO inside Azure DevOps.
Before we discovered universal packages, we simply checked-in the binary (platform) updates which our current extensions/customizations rely on. With this process we had some problems in context of duration to perform get-latest and disk space on build VMs. The reason behind the need to check-in the binary (platform) updates is that we have an automation in place to install these updates on development VMs which are not connected to LCS. And the reason why we cannot simply download the desired asset from LCS during our automation is that there is currently no API to do this.
Before you can up- and download universal packages you have to install VSTS CLI using the following URL: https://aka.ms/vsts-cli-windows-installer
After the installation you have to create a personal access token to login to Azure DevOps using VSTS CLI with the following PowerShell command:
vsts login –instance https://dev.azure.com/%5Byour-organization%5D –token [your personal access token]
# Set [your-organization] as CLI’s default
vsts configure -d instance=https://dev.azure.com/[your-organization]
After the login is done you can prepare the binary (platform) update you want to upload to Azure DevOps as universal package. I usually place the zipped packed in an folder under C:\Temp as you can so in the following screenshot:
Another preparation step for the upload is to create a feed under Azure DevOps Artifacts which you use as target for the upload. I created (as you can see in the banner of this post) a feed with the name BinaryPackages. After this is also done you can use the following PowerShell command to upload the binary (platform) update as universal package. I would recommend to use the product or platform build number which you can see in the LCS asset library for the version parameter. Because the displayed version number is not a semantic version, you have to delete the last dot (before 184.108.40.20604 after 8.1.17020004).
vsts package universal publish –instance https://dev.azure.com/%5Byour-organization%5D –feed BinaryPackages –name 81_binary_package –version 8.1.17020004 –description “8.1 Binary Package” –path C:\Temp\AXPlatformUpdate
When your package is available via universal packages your Azure DevOps should look similar to what you can see in the banner of this post and you can now use this artifakt for manuall downloads or for any kind of automation to install the package on VMs. The PowerShell command to download the binary (platform) update to your C:\Temp folder is the following:
vsts package universal download –instance https://dev.azure.com/%5Byour-organization%5D –feed BinaryPackages –name 81_binary_package –version 8.1.17020004 –path C:\Temp