In the Part1 of the blog post we saw how to set up the CDS projects, and also the first Azure DevOps Pipeline which allows us to grab the customizations, extract the content and commit to the github repository (inside a CDS project). In this blog I’ll write about the second pipeline, which I use to build the project and generate the solution. This pipeline doesn’t need any environment, in order to build de solution.
Before we build the solution, we should increment the version. In my case I wanted to take the PCF Version and sync that with the solution version. Until now I’ve seen the implementation of version incrementation using PowerShell. If you prefer this aproach and are looking for an example, you can follow the blogs mentioned in the Part1 of this blog.
I preferred anothed approach. It’s not really easier, but I think I’ve falled in love with the PowerAppsCLI 💜 . I couldn’t resist and tried to use it. Not sure if you’ll like it, or you’ll think I went crazy, but I’m happy that the experiment succeeded.
The “pac” opens a few possibilities to work with version, like:
pac pcf version pac solution version
And both have the possibility to specify a “–strategy”
pac pcf version --strategy
It updates the build version of ‘ControlManifest.xml’. Available values are “gittags, filetracking, manifest”. If you want to read more about “version –strategy”, you can find this in my other blog. For my pipeline I’ve decided to use the “manifest” to track the version.
pac pcf version --strategy manifest
This will search for the ControlManifest.xml and increment the build version.
Ok, we have the PCF version set. Now I need to set the build version for both CDS projects. For that I used:
pac solution version --patchversion
This allows me to set in the solution version only the latest part. The only problem was, that I had to read the version from the manifest. I wonder if there is a better way.
If the PCF manifest is not incremented, the pcf won’t be updates in your environment. But take care: the major or minor version shouldn’t be changed. Otherwise you’ll see the changes only after removing and replacing the PCF on the form.
There are so many steps, only because I need 4 solutions at the end: PCFOnly, Complete (PCF and Customizing), both in managed and unmanaged version.
1. Install pac CLI and increment version
Disclaimer: I’m an absolute beginner in DevOps and in PowerShell. In case you know better ways for the implementation, please let me know.
This one is a little longer:
And here comes the explanation:
1.1 Install the PowerApps CLI (I used the msi package)
Invoke-WebRequest -Uri https://aka.ms/PowerAppsCLI -OutFile powerapps-cli-1.0.msi Start-Process powerapps-cli-1.0.msi -ArgumentList "/q" -Wait & "$env:LOCALAPPDATA\Microsoft\PowerAppsCLI\pac" install latest
1.2 Increment the PCF manifest version.
& "$env:LOCALAPPDATA\Microsoft\PowerAppsCLI\pac" pcf version -s manifest
1.3 Then read the new patch version, because it’s need for the solution increment
$manifest = [xml](Get-Content "$(Build.SourcesDirectory)/MyProject/ControlManifest.Input.xml") $controlVersion = [version]$manifest.SelectSingleNode("/manifest/control").version $patch = $controlVersion.Build Write-Output $patch
1.4 Then set the solution version
cd "$(Build.SourcesDirectory)\Solution\Complete" & "$env:LOCALAPPDATA\Microsoft\PowerAppsCLI\pac" solution version -pv $patch cd "$(Build.SourcesDirectory)\Solution\PCFOnly" & "$env:LOCALAPPDATA\Microsoft\PowerAppsCLI\pac" solution version -pv $patch
2. Install npm packages
3. Build the solution for my “complete” .cdsproj in release mode
The Build Arguments for release are : /t:build /restore /p:configuration=Release
4. Build the solution for my “complete” .cdsproj in debug mode
5.&6. Repeat step 3 & 4 for the PCFOnly .cdsproj
7. Commit the changes
8. Publish the pipeline artifact for the “Complete” cdsproj
We cannot use wildcards, so I took the whole “bin” folder. This way I get the subfolder “Release” and “Debug”
9. Repeat the step 8, but for the PCFOnly cdsproj
This time the artifact will be placed in the “DropControl”.
Each “Drop” folder will contain “Complete.zip” and “Complete_managed.zip” while each “DropControl” will contain PCFOnly.zip and PCFOnly_managed.zip. That’s because the .cdsproj files were changed to generated both managed and unmanaged solutions.