This guide provides a conceptual overview of Application Lifecycle Management (ALM) options for Power Pages, covering Solutions, PAC CLI, Power Platform Pipelines, and GitHub Actions. Understanding these options helps you choose the right deployment strategy for your Power Pages projects.
Prerequisites:
- Basic understanding of Power Platform and Dataverse
- Familiarity with version control concepts
- Understanding of deployment workflows
Application Lifecycle Management (ALM) is the process of managing the lifecycle of an application from development through deployment to production. For Power Pages, ALM includes:
- Version Control: Tracking changes to site configuration and code
- Deployment: Moving changes between environments (dev, test, production)
- Collaboration: Multiple developers working on the same project
- Quality Assurance: Testing changes before production deployment
- Rollback: Reverting to previous versions if issues occur
Solutions are the primary mechanism for packaging and deploying Power Platform components, including Dataverse tables, Power Pages site metadata, and customizations.
Solutions are containers that hold:
- Dataverse Tables: Custom tables, columns, relationships
- Power Pages Components: Web pages, templates, forms, lists
- Web Resources: JavaScript, CSS, images
- Site Settings: Configuration settings
- Table Permissions: Security configurations
Managed Solutions:
- ✅ Locked and cannot be modified in target environment
- ✅ Used for production deployments
- ✅ Prevents accidental changes
- ✅ Supports uninstall (removes components)
Unmanaged Solutions:
- ✅ Can be modified in target environment
- ✅ Used for development
- ✅ Allows customization after import
- ❌ Cannot be uninstalled cleanly
Solutions use a layering system:
- Base Solution: Original components
- Managed Solutions: Installed on top
- Unmanaged Customizations: Local changes
Best Practice: Always work in unmanaged solutions during development, then export as managed for production.
Every solution has a publisher that defines:
- Prefix: Applied to custom components (e.g.,
pa911_) - Name: Organization or project name
- Version: Solution version number
Reference: Solutions Overview
PAC CLI is a command-line interface for Power Platform that enables automation of common tasks, including Power Pages site management.
Authentication:
# Authenticate to Dataverse environment
pac auth create -u https://your-org.crm.dynamics.comList Websites:
# List all Power Pages websites in the environment
pac pages listDownload Site:
# Download Power Pages site metadata
pac pages download --path ./src/site -id {WebSiteId} --modelVersion 2Upload Changes:
# Upload site metadata changes
pac pages upload --path ./src/site --modelVersion 2Upload with Deployment Profile:
# Upload with environment-specific configuration
pac pages upload --path ./src/site --deploymentProfile dev --modelVersion 2Power Pages supports two data models:
- Model Version 1: Standard data model
- Model Version 2: Enhanced data model (recommended)
Check Model Version:
pac pages list -vDeployment profiles allow environment-specific configurations:
Structure:
src/site/
└── deployment-profiles/
├── dev.deployment.yml
├── test.deployment.yml
└── prod.deployment.yml
Example Profile (dev.deployment.yml):
adx_contentsnippet:
- adx_contentsnippetid: 76227a41-a33c-4d63-b0f6-cd4ecd116bf8
adx_name: Browser Title Suffix
adx_value: " · Custom Portal (Dev)"Reference: Power Platform CLI Tutorial
Power Platform Pipelines provide a low-code/no-code approach to deploying solutions between environments.
Pipelines are automated workflows that:
- Deploy solutions from source to target environment
- Run validation checks
- Handle approvals
- Provide deployment history
- Host Environment: Manages pipeline definitions
- Source Environment: Where solutions are developed
- Target Environment: Where solutions are deployed
- Stages: Steps in the deployment process
Typical pipeline stages:
- Validation: Check solution for errors
- Export: Export solution from source
- Import: Import solution to target
- Approval: Manual approval step (optional)
- Post-Deployment: Run scripts or flows
Use Pipelines When:
- ✅ You want a low-code deployment solution
- ✅ You need approval workflows
- ✅ You have multiple environments (dev → test → prod)
- ✅ You want deployment history and audit trails
Don't Use Pipelines When:
- ❌ You need fine-grained control over deployment
- ❌ You want to deploy only specific components
- ❌ You need custom deployment scripts
Reference: Power Platform Pipelines
GitHub Actions provides CI/CD (Continuous Integration/Continuous Deployment) for Power Pages using automation scripts and workflows.
GitHub Actions are automated workflows that:
- Trigger on events (push, pull request, schedule)
- Run scripts and commands
- Deploy to environments
- Run tests and validations
Example Workflow (.github/workflows/deploy-power-pages.yml):
name: Deploy Power Pages
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PAC CLI
uses: microsoft/powerplatform-actions/setup-cli@v1
- name: Authenticate
run: |
pac auth create --url ${{ secrets.DATAVERSE_URL }} \
--username ${{ secrets.USERNAME }} \
--password ${{ secrets.PASSWORD }}
- name: Upload Power Pages
run: |
pac pages upload --path ./src/site \
--modelVersion 2 \
--deploymentProfile ${{ env.DEPLOYMENT_PROFILE }}
- name: Export Solution
run: |
pac solution export --path ./src/solution \
--name "PawsFirst Portal" \
--managedStore sensitive information as secrets:
DATAVERSE_URL: Environment URLUSERNAME: Service account usernamePASSWORD: Service account passwordDEPLOYMENT_PROFILE: Environment name (dev, test, prod)
Use GitHub Actions When:
- ✅ You want full control over deployment process
- ✅ You need custom deployment scripts
- ✅ You want to integrate with other tools
- ✅ You need advanced CI/CD features
Don't Use GitHub Actions When:
- ❌ You prefer low-code solutions
- ❌ You don't have DevOps expertise
- ❌ You want simple approval workflows
Reference: Power Platform GitHub Actions
Use this matrix to choose the right ALM approach:
| Scenario | Recommended Approach | Why |
|---|---|---|
| Simple deployments, few environments | Solutions + PAC CLI | Quick setup, manual control |
| Multiple environments, approval needed | Power Platform Pipelines | Built-in approvals, audit trail |
| Advanced CI/CD, custom scripts | GitHub Actions | Full automation, flexibility |
| Development only | Unmanaged Solutions | Easy to modify, iterate quickly |
| Production deployment | Managed Solutions | Locked, prevents changes |
| Environment-specific config | Deployment Profiles | Different settings per environment |
- Use Git: Store all Power Pages metadata in version control
- Commit Often: Commit changes frequently with descriptive messages
- Branch Strategy: Use branches for features, fixes, and releases
- Tag Releases: Tag solution versions for easy rollback
- Dev → Test → Prod: Always deploy through environments in order
- Test First: Test changes in dev/test before production
- Backup Before Deploy: Export solutions before major deployments
- Document Changes: Keep changelog of what's being deployed
- One Solution Per Project: Keep related components together
- Meaningful Names: Use descriptive solution names
- Version Numbers: Follow semantic versioning (1.0.0, 1.1.0, 2.0.0)
- Managed for Prod: Always use managed solutions in production
- Download Before Changes: Always download latest before making changes
- Test Locally: Test changes locally before uploading
- Use Deployment Profiles: Use profiles for environment-specific configs
- Document Commands: Keep scripts of common commands
# 1. Download from dev
pac pages download --path ./src/site -id {dev-site-id} --modelVersion 2
# 2. Make changes locally
# (edit files in ./src/site)
# 3. Upload to test
pac auth create -u https://test-org.crm.dynamics.com
pac pages upload --path ./src/site --deploymentProfile test --modelVersion 2
# 4. After testing, upload to production
pac auth create -u https://prod-org.crm.dynamics.com
pac pages upload --path ./src/site --deploymentProfile prod --modelVersion 2- Develop solution in dev environment
- Export solution as managed
- Create pipeline from dev to test
- Run pipeline to deploy to test
- Test in test environment
- Create pipeline from test to prod
- Get approval and deploy to prod
- Developer makes changes locally
- Commits and pushes to feature branch
- GitHub Actions runs tests
- Create pull request to main
- Merge triggers deployment to dev
- Manual approval triggers deployment to prod
Issue: PAC CLI authentication fails
- Solution: Verify environment URL is correct
- Solution: Check user has appropriate permissions
- Solution: Try interactive authentication
Issue: Upload fails with conflicts
- Solution: Download latest version first
- Solution: Resolve conflicts manually
- Solution: Check for locked components
Issue: Deployment profile not applying
- Solution: Verify profile file name matches parameter
- Solution: Check YAML syntax is correct
- Solution: Verify profile is in correct location
Issue: Solution import fails
- Solution: Check target environment has required dependencies
- Solution: Verify solution version compatibility
- Solution: Check for missing required components
- SharePoint Integration - Set up document management
- Pet Document Upload (OOTB) - Implement OOTB document management
- Pet Document Upload (Custom) - Build custom document management