ALbuild for Azure DevOps
Granular, composable Azure DevOps pipeline tasks for Microsoft Dynamics 365 Business Central AL
development — by 365 business development.
ALbuild is built on the
businessdev.ALbuild PowerShell
module. Every task is a thin wrapper that imports the module and calls a single cmdlet, so the same
behaviour runs locally and in CI — with no dependency on BcContainerHelper.
Highlights
- Granular, composable tasks. The monolithic Create Build Container of the previous generation
is split into small, reusable steps you arrange freely: Get BC Artifact → Create BC Container →
Resolve Dependencies → Compile → Sign → Publish → Run Tests → Remove BC Container.
- BcContainerHelper-free. The container stack is reimplemented inside the module; the extension
depends only on
businessdev.ALbuild.
- Reproducible dependency resolution. Transitive resolution across NuGet v3 feeds, Azure DevOps
Universal Packages and committed local
.app files, captured in a dependencies.lock.json.
- Run pipelines locally. Reproduce a CI run on a developer machine with
Invoke-ALbuildPipeline.
- Generous free tier. Every build, compile, test, sign and NuGet-publish task is free of
license. Only the deployment tasks require a subscription — see Pricing.
Supported environments
- Microsoft Dynamics 365 Business Central On-Premises
- Microsoft Dynamics 365 Business Central Online (SaaS)
- Microsoft Dynamics 365 Business Central on Docker
Getting started
- Open the Azure DevOps Marketplace and search for ALbuild for Azure DevOps.
- Select the extension and choose Get it free to install it into your organization.
- Add the tasks to your build and release pipelines.
The free-of-license tasks work immediately — no license key required. To use the licensed
deployment tasks, acquire a license for your Azure DevOps organization at
365businessdev.com. Licensing is verified automatically per
organization, and a free trial is available.
For detailed guidance, see the documentation and the ready-to-use
pipeline templates.
Example pipeline
A minimal build pipeline that resolves the BC artifact, creates a container, restores dependencies,
compiles, signs, installs, runs the tests, and removes the container:
trigger:
- main
- master
pool:
name: Self Hosted
steps:
- checkout: self
persistCredentials: true
- task: GetBcArtifact@0
displayName: 'Get BC Artifact'
inputs:
type: 'sandbox'
version: 'latest'
country: 'w1'
- task: StampBuildVersion@0
displayName: 'Set Version Number'
inputs:
versioningSchema: 'major.minor.build.no-of-commits'
onlyUpdateOnChangedSource: true
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
- task: CreateBcContainer@0
displayName: 'Create BC Container'
- task: ResolveDependencies@0
displayName: 'Resolve Dependencies'
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
- task: CompileApp@0
displayName: 'Compile'
inputs:
createNuGetPackage: true
- task: SignBcApp@0
displayName: 'Sign'
inputs:
signingAzureKeyVaultUrl: '$(SigningAzureKeyVaultUrl)'
signingAzureKeyVaultTenantId: '$(SigningAzureKeyVaultTenantId)'
signingAzureKeyVaultClientId: '$(SigningAzureKeyVaultClientId)'
signingAzureKeyVaultClientSecret: '$(SigningAzureKeyVaultClientSecret)'
signingCertName: '$(SigningCertName)'
- task: PublishApp@0
displayName: 'Publish & Install'
inputs:
schemaUpdateMode: 'Synchronize'
- task: RunBcTests@0
displayName: 'Run Tests'
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: XUnit
testResultsFiles: TestResults.xml
failTaskOnFailedTests: true
- task: RemoveBcContainer@0
displayName: 'Remove BC Container'
condition: always()
Tasks
Each task wraps exactly one businessdev.ALbuild cmdlet.
Free-of-license tasks
Available to everyone — no license required.
Task (name@version) |
Purpose |
Cmdlet |
GetBcArtifact@0 |
Resolve the BC artifact URL |
Find-BcArtifactUrl |
StampBuildVersion@0 |
Version app.json and claim a build branch (parallel-safe) |
Invoke-BcBuildVersionStamp |
CreateBcContainer@0 |
Create the build container |
New-BcContainer |
CreateBcContainerUser@0 |
Create a container user |
New-BcContainerUser |
InstallTestToolkit@0 |
Install the test toolkit |
Install-BcContainerTestToolkit |
ResolveDependencies@0 |
Resolve dependencies to .alpackages (NuGet / Universal / local) |
Resolve-BcDependencies |
GetUniversalPackage@0 |
Download a named Universal-feed package |
Get-BcUniversalPackage |
ImportConfigPackage@0 |
Import a .rapidstart configuration package |
Import-BcConfigurationPackage |
InstallBc365App@0 |
Install 365 business development app(s) |
Install-Bc365App |
CompileApp@0 |
Compile the AL app (container or container-less) |
Invoke-BcCompiler |
CheckTranslations@0 |
Validate XLIFF translations |
Test-BcTranslation |
SignBcApp@0 |
Sign the .app via Azure Key Vault |
Invoke-BcAppSigning |
PublishApp@0 |
Publish, sync and install the app to a container |
Publish-BcContainerApp |
RunBcTests@0 |
Run AL tests and emit JUnit / XUnit results |
Invoke-BcContainerTest |
PublishTestinyResults@0 |
Push test results to testiny.io |
Publish-BcTestinyResult |
RemoveBcContainer@0 |
Remove the build container |
Remove-BcContainer |
PublishPackage@0 |
Push a NuGet package to a feed |
Publish-BcPackage |
Licensed tasks
Deployment tasks that require a valid ALbuild license for your Azure DevOps organization — see
Pricing.
Task (name@version) |
Purpose |
Cmdlet |
PublishPerTenantExtension@0 |
Deploy a Per-Tenant Extension (PTE) to BC online |
Publish-BcPerTenantExtension |
PublishOnPremApp@0 |
Publish and install on a Business Central On-Premises environment |
Publish-BcOnPremApp |
PublishDevExtension@0 |
Publish an app to a development (Dev) endpoint |
Publish-BcDevExtension |
SubmitMarketplace@0 |
Submit an app to Microsoft Marketplace (AppSource) |
Submit-BcMarketplaceApp |
BuildRuntimePackages@0 |
Build runtime packages per platform version |
Build-BcRuntimePackages |
The license check runs only on entry to a licensed task. If no valid license is found, the task
fails with clear remediation guidance. Free-of-license tasks never perform a license check.
Pricing
ALbuild follows a simple, transparent model: the complete build toolchain is free of license,
and you pay only when you need the premium deployment tasks (the Licensed tasks listed above).
Subscriptions scale from pay-as-you-go to organization-wide, so you only pay for what you use.
A free trial lets you evaluate the licensed tasks before subscribing. Licensing is verified
automatically per Azure DevOps organization — there is nothing to configure in your pipelines.
Every plan includes all free-of-license tasks plus the full set of licensed deployment tasks, the
pipeline templates, and standard support through the
Service Desk.
| Plan |
Price |
Best for |
Scope |
| Per Pipeline Run |
1.00 € / run |
Individuals or small teams needing occasional access |
Pay-as-you-go; charged per pipeline run |
| Per 5 Repositories |
30.00 € / month |
Teams managing a handful of repositories |
Up to 5 Azure DevOps repositories; unlimited runs |
| Per DevOps Project |
200.00 € / month |
Larger projects spanning many repositories |
All repositories in one project; unlimited runs |
| Per DevOps Organization |
400.00 € / month |
Organizations running multiple projects |
All repositories and projects in one organization; unlimited runs |
Need more than 5 repositories? Combine multiple Per 5 Repositories subscriptions, or move up
to the Per DevOps Project or Per DevOps Organization plan for unlimited repositories.
To get started, visit 365businessdev.com.
Migrating from ALbuild V1
To keep existing pipelines running, the extension also ships the ALbuild V1 tasks
(CreateBuildContainer, Compile, Install, AppVersioning, SignApp, ReleaseAppSource, …).
They keep their original name, version and inputs, reproduce the V1 behaviour on top of the
businessdev.ALbuild module, and emit a deprecation warning while still succeeding.
The V1 tasks are frozen — they will not receive new features or fixes. Migrate to the new tasks
at your own pace to benefit from ongoing improvements.
Support
For questions, issues, or contributions, visit our
GitHub repository.
Thank you for choosing ALbuild for your AL development and build pipelines.