
Build Your First DevOps Pipeline for the Power Platform
Build Your First DevOps Pipeline for the Power Platform
π
Date: Friday, June 27, 2025
π Time: 2:15 PM β 3:00 PM BST
π Location: National Usergroup, Room G8
ποΈ Session Link: https://d365ppug-national-27-06-2025.sessionize.com/session/905816
Session Overview
Youβve exported a solution. Maybe even unpacked it. But whatβs next?
In this hands-on, beginner-friendly session, Ian Tweedie (TechTweedie), Power Platform Technical Consultant at Capgemini, will walk you through building your very first DevOps pipeline for the Power Platform β using Azure DevOps and real-world tools that anyone can adopt.
Youβll see how to go from manual solution management to a repeatable, secure deployment process, powered by the Power Platform CLI and Azure DevOps build tasks. Expect practical guidance, live demos, and templates you can use right away.
Whether youβre a low-code maker or a seasoned dev dipping your toes into DevOps, youβll leave with the confidence to automate your solution lifecycle.
What Youβll Learn
- Why DevOps matters for Power Platform projects
- How to structure your repo and solutions
- Setting up your first Azure DevOps pipeline to export, unpack, commit, and document a solution
- How to deploy
- Bonus: How to include automated documentation of your solution
Demos Include
- Creating your first pipeline in Azure DevOps
- Explore an unpacked solution
- Generating documentation
- Schedule a backup of the build
- Deploy to a target
Why Attend?
- π‘ Gain practical insights into DevOps for Power Platform
- π οΈ Learn hands-on with live demos and real-world tools
- π Take away templates and guidance to start automating your solution lifecycle
Donβt miss this opportunity to level up your Power Platform projects with DevOps!
Slides
Pipelines
Recommended Folder Structure
MyPowerPlatformProject/
βββ solutions/
β βββ src/
β β βββ MySolution/
β βββ MySolution.zip
βββ pipelines/
β βββ export-solution.yml
β βββ build-and-deploy-solution.yml
βββ documentation/
βββ README.md
export-solution.yml
name: $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
variables:
- name: varPowerPlatformSPN
# value: YOUR-OWN-VALUE-HERE
value: Dataverse - Backup
- name: varSolutionName
# value: YOUR-OWN-VALUE-HERE
value: ProjectExpenseLogger
trigger: none
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
persistCredentials: true
clean: true
- task: PowerPlatformToolInstaller@2
inputs:
DefaultVersion: true
AddToolsToPath: true
- task: PowerPlatformSetSolutionVersion@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: '$(varPowerPlatformSPN)'
SolutionName: '$(varSolutionName)'
SolutionVersionNumber: '1.0.0.$(Build.BuildID)'
- task: PowerPlatformExportSolution@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: '$(varPowerPlatformSPN)'
SolutionName: '$(varSolutionName)'
SolutionOutputFile: '$(Build.SourcesDirectory)\solutions\$(varSolutionName)_1.0.0.$(Build.BuildID)_managed.zip'
Managed: true
AsyncOperation: true
MaxAsyncWaitTime: '60'
- task: PowerPlatformExportSolution@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: '$(varPowerPlatformSPN)'
SolutionName: '$(varSolutionName)'
SolutionOutputFile: '$(Build.SourcesDirectory)\solutions\$(varSolutionName)_1.0.0.$(Build.BuildID).zip'
Managed: false
AsyncOperation: true
MaxAsyncWaitTime: '60'
- task: PowerPlatformUnpackSolution@2
inputs:
SolutionInputFile: '$(Build.SourcesDirectory)\solutions\$(varSolutionName)_1.0.0.$(Build.BuildID).zip'
SolutionTargetFolder: '$(Build.SourcesDirectory)\solutions\src\$(varSolutionName)'
SolutionType: 'Both'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'pac solution create-settings --solution-zip $(Build.SourcesDirectory)\solutions\$(varSolutionName)_1.0.0.$(Build.BuildID).zip --settings-file $(Build.SourcesDirectory)\solutions\$(varSolutionName)-settings.json'
- task: CmdLine@2
inputs:
script: |
echo commit all changes
git config user.email "$(Build.RequestedForEmail)"
git config user.name "$(Build.RequestedFor)"
git checkout -b main
git add --all
git commit -m "Latest solution changes."
echo push code to new repo
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push origin main
build-and-deploy-solution.yml
name: $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
variables:
- name: varSolutionName
# value: YOUR-OWN-VALUE-HERE
value: FirstPipeline
- name: varPowerPlatformSPN
# value: YOUR-OWN-VALUE-HERE
value: Dataverse - mightora
trigger: none
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
persistCredentials: true
clean: true
- task: PowerPlatformToolInstaller@2
inputs:
DefaultVersion: true
AddToolsToPath: true
- task: PowerPlatformPackSolution@2
inputs:
SolutionSourceFolder: '$(Build.SourcesDirectory)\solutions\src\$(varSolutionName)'
SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\solutions\build\$(varSolutionName).zip'
- task: PowerPlatformImportSolution@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'Dataverse - Backup'
Environment: 'https://mightora.crm11.dynamics.com/'
SolutionInputFile: '$(Build.ArtifactStagingDirectory)\solutions\build\$(varSolutionName).zip'
AsyncOperation: true
MaxAsyncWaitTime: '60'
Schedule / Backup
schedules:
- cron: 0 18 * * 1-5
displayName: Weekday Backup
branches:
include:
- main
always: true
Documentation
Download from here: https://marketplace.visualstudio.com/items?itemName=mightoraio.mightora-power-platform-devOps-extension
steps:
- task: mightoraio.mightora-power-platform-devOps-extension.mightora-documentTableRelationships-task.documentTableRelationships@1
displayName: 'Mightora Power Platform Table Relationship Documentation Generator'
inputs:
locationOfUnpackedSolution: $(Build.SourcesDirectory)\solutions\src\$(varSolutionName)
wikiLocation: documentation