Overview
AL-Go for GitHub supports multiple deployment strategies:- Environment-based deployment: Automatic deployment to Business Central environments
- Package-based deployment: Delivery to NuGet feeds and GitHub Packages
- Storage-based deployment: Publishing artifacts to Azure Storage
- AppSource deployment: Submission to Microsoft AppSource
Continuous Deployment is automatically triggered by the CI/CD workflow on successful builds. Production environments tagged with
(Production) are excluded from automatic deployments.Environment Deployment
Basic Configuration
Configure environments in your AL-Go settings to enable automatic deployment:- Successful builds automatically deploy to DEV, QA, and UAT environments
- Each environment requires an
AUTHCONTEXTsecret - Deployments use Service-to-Service (S2S) authentication
Branch-Specific Deployment
Control which branches deploy to which environments:feature/*branches → DEV onlydevelopbranch → DEV onlyrelease/*branches → DEV and QAmainbranch → DEV, QA, and UAT
Advanced Environment Configuration
Environment Naming
Map GitHub environment names to Business Central environment names:This is useful when:
- BC environment names contain spaces
- BC environment names have special characters
- You want different naming conventions
Deployment Timing
Control when deployments occur:This configuration deploys to UAT only during scheduled times (2 AM on weekdays).
Deployment Workflows
CI/CD Workflow
The primary workflow for continuous deployment: Trigger conditions:- Push to repository branches
- Pull request creation/updates
- Manual workflow dispatch
- Scheduled runs
Analyze
- Identifies changed projects
- Determines target environments
- Filters out production environments
- Sets up build matrix
Deploy
- Authenticates to environments
- Publishes apps to Business Central
- Verifies deployment success
- Logs deployment details
Publish to Environment Workflow
Manual deployment workflow for controlled releases: Use cases:- Deploy to production environments
- Deploy specific versions
- Re-deploy after configuration changes
- Emergency hotfix deployments
- App version:
latest,current, or specific version tag - Environment name: Target environment or
*for all
Authentication Methods
Service-to-Service (S2S) Authentication
The recommended authentication method for automated deployments: AUTHCONTEXT secret format:- Create Microsoft Entra app registration
- Configure API permissions for Business Central
- Generate client secret
- Add app to BC environment
- Create GitHub secret
Azure Key Vault Integration
For enhanced security, store authentication secrets in Azure Key Vault:- Centralized secret management
- Automatic secret rotation
- Enhanced audit logging
- Compliance with security policies
Delivery Targets
Continuous delivery to package repositories and storage:NuGet/GitHub Packages
Automatically publish apps to package feeds:GitHubPackagesContext: For GitHub PackagesNuGetContext: For custom NuGet feeds
Azure Storage
Publish artifacts to Azure Storage accounts:Deployment Strategies
Trunk-Based Development
Single main branch with feature flags:- Develop features with feature flags
- Merge to main frequently
- Automatic deployment to DEV and QA
- Manual promotion to production
GitFlow
Multiple long-lived branches:- Feature development in
feature/*branches → DEV - Integration in
developbranch → DEV - Release branches
release/*→ QA - Production releases in
main→ UAT - Manual deployment to production
Environment Promotion
Progressive deployment through environments:Development
Automatic deployment on every commit:
- Branch:
develop - Environment: DEV
- Frequency: Every push
Testing
Deployment after DEV validation:
- Branch:
develop(after approval) - Environment: QA
- Frequency: Daily or on-demand
Monitoring and Observability
Deployment Metrics
Track key deployment indicators:- Deployment Frequency: How often deployments occur
- Lead Time: Time from commit to deployment
- Failure Rate: Percentage of failed deployments
- Recovery Time: Time to recover from failures
Workflow Logging
AL-Go workflows provide detailed logging:Telemetry Integration
Enable AL-Go telemetry for deployment tracking:- Deployment duration
- Success/failure rates
- Environment targets
- App versions deployed
Best Practices
Small, Frequent Deployments
Recommendations:
- Deploy multiple times per day to DEV
- Keep changes small and focused
- Use feature flags for incomplete features
- Enable quick rollback capabilities
- Reduced deployment risk
- Faster feedback loops
- Easier troubleshooting
- Improved team velocity
Automated Testing
Test pyramid:
- Unit tests (fast, many)
- Integration tests (moderate)
- End-to-end tests (slow, few)
- Run tests before deployment
- Block deployment on test failures
- Generate test reports
- Track test coverage
Environment Parity
Maintain consistency:
- Use same BC version across environments
- Match configuration settings
- Replicate data structures
- Mirror security settings
- Store environment configs in Git
- Use AL-Go settings for consistency
- Document environment differences
- Automate environment setup
Rollback Preparation
Rollback strategy:
- Tag all production deployments
- Keep previous versions accessible
- Test rollback procedures regularly
- Document rollback steps
- Use
Publish To Environmentworkflow - Deploy previous version tag
- Verify functionality
- Communicate to stakeholders
Troubleshooting
Common Issues
Deployment Not Triggered
Possible causes:
- Branch not configured for environment
- Environment filtered in Analyze phase
- CI/CD workflow disabled
- Missing authentication secret
- Check
DeployTo<Env>settings - Verify branch patterns
- Review workflow logs
- Confirm secret exists
Authentication Failures
Symptoms:
- 401 Unauthorized errors
- Invalid client secret
- Tenant not found
- Regenerate client secret
- Verify TenantID, ClientID
- Check API permissions
- Ensure JSON is compressed
Deployment Timeout
Causes:
- Large app size
- Environment performance
- Network connectivity
- Concurrent deployments
- Optimize app size
- Scale BC environment
- Check network status
- Stagger deployments
Version Conflicts
Scenarios:
- Dependency version mismatch
- App already installed
- Schema changes required
- Update dependencies
- Force-sync environment
- Plan schema migrations
- Use upgrade codeunits
Security Considerations
Secret Management
Use Environment Secrets
Store sensitive data in GitHub environment secrets:
- Isolated per environment
- Protected by branch policies
- Audited access
Implement Least Privilege
Grant minimum necessary permissions:
- Service principal per environment
- Read-only for non-deployment workflows
- Time-limited credentials
Enable Audit Logging
Track all deployment activities:
- GitHub Actions logs
- Azure AD sign-in logs
- BC telemetry
Compliance
Ensure continuous deployment meets compliance requirements:- Change Management: Document all deployments
- Approval Gates: Require manual approval for sensitive environments
- Audit Trail: Maintain deployment history
- Separation of Duties: Different teams for dev and production
Next Steps
Sandbox Environment
Set up sandbox environments for automated deployment
Production Environment
Configure production environments for controlled releases
Delivery Targets
Publish packages to NuGet feeds and GitHub Packages
AL-Go Settings
Explore all available configuration options