7-Zip compression levels in Azure DevOps Archive Files task
In an attempt to make my artifacts smaller, I recently chose to use 7-Zip compression, or archiveType: 7z
, in an Archive Files task of an Azure DevOps YAML pipeline. 7-Zip provides 5 compression levels: 1 (fastest), 3 (fast), 5 (normal), 7 (maximum) and 9 (ultra), as well as option 0, which doesn’t compress anything.
I like YAML pipelines, because they live in my repo and I can use templates. However, the online editing experience is not particularly great. Sure, the online editor “assists” you when editing a simple file, but if you’re referencing templates, you’re out of luck (or at least I haven’t found a way to edit a template and use the “assistant”.)
Long story short, I’m editing a template (in a text editor) and I want to specify the compression level in my task. The official Archive Files task documentation page unfortunately doesn’t document the property that defines this. Luckily, a dummy pipeline and the “assistant” allowed me to quickly figure out that I wanted to set the sevenZipCompression
property of the task. Of course, since the property wasn’t documented, neither were the values that it accepted. So with a little patience and using the task’s source code to confirm, I quickly came up with a table, which I decided to persist here for future reference:
Level | Descriptoin | sevenZipCompression value | Default |
---|---|---|---|
0 | No compression | ’none' | |
1 | Fastest compressing | ‘fastest’ | |
3 | Fast compressing | ‘fast’ | |
5 | Normal compressing | ’normal' | yes |
7 | Maximum compressing | ‘maximum’ | |
9 | Ultra compressing | ‘ultra’ |
7-zip compression levels for the Azure Pipelines Archive files task
A complete example of the task would look something like this:
\- task: ArchiveFiles@2
displayName: 'Compress Files'
inputs:
rootFolderOrFile: '$(Build.BinariesDirectory)'
includeRootFolder: false
archiveType: '7z'
sevenZipCompression: 'maximum'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildNumber).zip'
replaceExistingArchive: true
Illustration: Emballages compressés by Daniel Hennemand is licensed under CC BY-NC-ND 2.0