ALOps
Welcome to ALOps, an extension for Microsoft Azure DevOps, for easily setting up build and release pipelines for AL Language Extensions, aka "Microsoft Dynamics 365 Business Central Extensions".
Complete documentation can be found our GitHub project.
Supported Environments
OnPrem
Docker (Self-Host Agent)
SaaS
ALOps Tasks
- Interact with BC SaaS AdminCenter API.
- YAML Template:
- task: ALOpsAdminCenterAPI@1
displayName: 'ALOps AdminCenter API'
inputs:
azure_tenant_id: # Azure Tenant Id. Only required for BC SaaS $(azure_tenant_id)
azure_app_client_id: # Azure AD Application Client Id. $(azure_app_client_id)
azure_app_client_secret: # Azure AD Application Client Secret. $(azure_app_client_secret)
azure_app_client_certificate: # Azure AD Application Client Certificate. $(azure_app_client_certificate)
azure_app_client_certificate_password: # Azure AD Application Client Certificate Password. $(azure_app_client_certificate_password)
username: # Business Central Username. Leave empty for Service-2-Service authentication. $(username)
password: # Business Central User Password. Leave empty for Service-2-Service authentication. $(password)
checksecondsdelay: 30 # Seconds of delay betweel deployment status checks. $(checksecondsdelay)
maxtries: 20 # Max tries for status check. $(maxtries)
interaction: environment_list # Set Interaction to use. $(interaction)
wait_for_operation: True # Wait for operation. $(wait_for_operation)
environment: # Source Environment. $(environment)
target_environment: # Target Environment. $(target_environment)
target_environment_type: Sandbox # Used with Environment Copy, sets the type of the target environment. $(target_environment_type)
use_update_window: False # Use update window. $(use_update_window)
app_id: # App ID. $(app_id)
accept_isv_eula: False # Accept ISV Eula. $(accept_isv_eula)
force_dependencies: False # Force Dependencies. $(force_dependencies)
confirm_delete_data: False # Confirm Delete Data. $(confirm_delete_data)
ALOps Agent Maintenance
ALOps App License Check
- Check App files agains a license.
- YAML Template:
- task: ALOpsAppLicenseCheck@1
displayName: 'ALOps App License Check'
inputs:
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
licensefile: # Set the BC License File. Path or Url. $(licensefile)
artifact_path: $(System.ArtifactsDirectory)# Path for App Artifact. $(artifact_path)
artifact_filter: *.app # Filter used for locating App file relative to $(artifact_path). $(artifact_filter)
artifact_include: # Include-Filter used for locating App file relative to $(artifact_path). $(artifact_include)
artifact_exclude: # Exclude-Filter used for locating App file relative to $(artifact_path). $(artifact_exclude)
exclude_ranges: # Exclude-Ranges from LicenseCheck (Buffer / Tempory tables). Format: 60000..60099,70000..70100 $(exclude_ranges)
expiry_text: # String to find in license to match for ExpiryDate. $(expiry_text)
expiry_dateformat: # Date Format of the Expiry date, example: dd.MM.yyyy $(expiry_dateformat)
expiry_dayswarning: # Amount of days before License-Expiry for triggering a warning $(expiry_dayswarning)
exclude_tables: False # Exclude Table objects from LicenseCheck. $(exclude_tables)
exclude_codeunits: False # Exclude Codeunit objects from LicenseCheck. $(exclude_codeunits)
exclude_pages: False # Exclude Page objects from LicenseCheck. $(exclude_pages)
exclude_reports: False # Exclude Report objects from LicenseCheck. $(exclude_reports)
exclude_xmlports: False # Exclude XMLPort objects from LicenseCheck. $(exclude_xmlports)
exclude_queries: False # Exclude Query objects from LicenseCheck. $(exclude_queries)
warning_only: False # Only post warning, do not fail pipeline. $(warning_only)
pwsh: False # Run task in Powershell Core. $(pwsh)
ALOps App Runtime Package
- Get a NAV App runtime package for onprem deployment.
- YAML Template:
- task: ALOpsAppRuntimePackage@1
displayName: 'ALOps App Runtime Package'
inputs:
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
nav_serverinstance: BC140 # Specifies the name of a Business Central Server instance. $(nav_serverinstance)
nav_tenant: default # Specifies the ID of a specific tenant that you want to act on, such as Tenant1. $(nav_tenant)
targetproject: ./app.json # Path of the project to export as RuntimePackage. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory). $(targetproject)
appfilenametemplate: %APP_PUBLISHER%_%APP_NAME%_%APP_VERSION%_runtime.app# Template for App filename. $(appfilenametemplate)
showmycode: False # Overwrites the ShowMyCode value in the manifest. $(showmycode)
publish_artifact: True # Publish generated Runtime-App Artifact to DevOps. $(publish_artifact)
batchgeneratepackages: False # Generates packages for all apps in the solution. 'TargetProject' parameter is ignored. $(batchgeneratepackages)
ALOps App Sign
- Codesign Business Central extension with .pfx.
- YAML Template:
- task: ALOpsAppSign@1
displayName: 'ALOps App Sign'
inputs:
signmethod: PFX # Set Signmethod to use. PFX is legacy, HSM is the modern way $(signmethod)
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
batchsigncompiledapps: False # Batch Sign Apps taged by ALOpsAppCompile task. $(batchsigncompiledapps)
artifact_path: # Path for storing App Artifact. $(artifact_path)
nav_artifact_app_filter: *.app # Path of the App to Codesign. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory). $(nav_artifact_app_filter)
publish_artifact: True # Publish generated App Artifact to DevOps. $(publish_artifact)
timestamp_uri: # Uri of the timestamp service used during signing. $(timestamp_uri)
pfx_path: # Path or Url of the PFX file. $(pfx_path)
pfx_password: # Password for the PFX File. Recommended to use Azure-KeyVault secrets. $(pfx_password)
hsmmethod: KEYVAULT # Set HSM Signmethod to use. $(hsmmethod)
hsm_description: # Set the Description. $(hsm_description)
hsm_description_url: # Set the Description Url. $(hsm_description_url)
hsm_digestalgorithm: sha256 # Set the Digest Algorithm. $(hsm_digestalgorithm)
hsm_signing_endpoint: # Set the Trusted Signing Endpoint. $(hsm_signing_endpoint)
hsm_signing_account: # Set the Trusted Signing Account. $(hsm_signing_account)
hsm_trusted_certificateprofile: # Set the Trusted Certificate Profile. $(hsm_trusted_certificateprofile)
hsm_keyvault_name: # Set the KeyVault Name. $(hsm_keyvault_name)
hsm_keyvault_certificate_name: # Set the KeyVault Certificate Name. $(hsm_keyvault_certificate_name)
hsm_tenantid: # Set the Tenant ID. $(hsm_tenantid)
hsm_clientid: # Set the Client ID. $(hsm_clientid)
hsm_client_secret: # Set the Client Secret. $(hsm_client_secret)
ALOps App Sign Verify
ALOps AppSource
ALOps App Test
ALOps App Validation
- Validate App from Business Central AppSource.
- YAML Template:
- task: ALOpsAppValidation@1
displayName: 'ALOps App Validation'
inputs:
license_path: # Path of the FLF license to import. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory) or a downloadable Url. $(license_path)
countries: # Comma seperated array of countries to validate. When blank SupportedCountries value from AppSourceCop.json is used. $(countries)
affixes: # Comma seperated array of affixes. $(affixes)
artifact_path: $(System.ArtifactsDirectory)# Path for App Artifact(s). $(artifact_path)
artifact_filter: *.app # Filter used for locating App file relative to $(artifact_path). $(artifact_filter)
installapps_path: $(System.ArtifactsDirectory)# Path for InstallApps Artifact(s). $(installapps_path)
installapps_filter: *.app # Filter used for locating App file relative to $(installapps_path). $(installapps_filter)
previousapps_path: $(System.ArtifactsDirectory)# Path for PreviousApps Artifact(s). $(previousapps_path)
previousapps_filter: *.app # Filter used for locating App file relative to $(previousapps_path). $(previousapps_filter)
memory: 8G # Set maximum memory for Container. $(memory)
validateversion: # Full or partial version number. If specified, apps will also be validated against this version. $(validateversion)
validatecurrent: False # Validate against current version of Business Central. $(validatecurrent)
validatenextminor: False # Validate against Next Minor version of Business Central. $(validatenextminor)
validatenextmajor: False # Validate against Next Major version of Business Central. $(validatenextmajor)
sastoken: # SAS Token used to access Storage Account. $(sastoken)
skipverification: False # $(skipverification)
skipappsourcecop: False # $(skipappsourcecop)
includewarnings: False # Include this switch if you want to include Warnings. $(includewarnings)
failonerror: True # Include this switch if you want to fail on the first error instead of returning all errors to the caller. $(failonerror)
containername: bcserver # Only required when running multiple DevOps Agents on the same server. (Not recommended) $(containername)
accept_insider_eula: False # Accept Insider EULA. $(accept_insider_eula)
ALOps BCPT
ALOps BC Replay
ALOps App Cleaner
ALOps App Copy
ALOps App Compiler
- Compile a Business Central extension from AL code.
- YAML Template:
- task: ALOpsAppCompiler@1
displayName: 'ALOps App Compiler'
inputs:
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
targetproject: ./app.json # Path of the project to compile. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory). $(targetproject)
nav_computername: # Target Business Central Server running service tier. $(nav_computername)
nav_serverinstance: BC140 # Business Central Server Instance Name. $(nav_serverinstance)
nav_tenant: default # NAV Tenant used for symbols and compiling the app. $(nav_tenant)
nav_ports_dev: 7049 # NAV Port used for DEV-Service. $(nav_ports_dev)
bc_username: # BC Username for ServiceTier connection. $(bc_username)
bc_password: # BC User Password for ServiceTier connection. $(bc_password)
al_compiler_version: 0.12.15355 # AL Compiler version used for compiling. $(al_compiler_version)
ruleset: # Overrule the Ruleset from VSCode settings. Path relative to [alsourcepath] $(ruleset)
suppresswarnings: KEEP # Overrule the 'suppresswarnings' setting. $(suppresswarnings)
al_analyzer: # AL Analyzer(s) used for compiling. (Example: CodeCop,UICop) $(al_analyzer)
ignorepragmas: # Report Suppressed Diagnostics: diagnostics suppressed in source code should be emitted. $(ignorepragmas)
nav_app_version: 1.0.*.0 # Template for versioning NAV-Apps. '*' is replaced by the current Build Number. $(nav_app_version)
vsix_download_path: # Alternative VSIX download url. 'Latest' can be specified. $(vsix_download_path)
use_ssl: False # Use SSL for Business Central connections. $(use_ssl)
download_test_symbols: False # Download Test Symbols explicitly (without Test-Version reference in App.json). $(download_test_symbols)
usecompression: True # Compress Source-Folder for transfer to docker container. $(usecompression)
publish_artifact: True # Publish generated App Artifact to DevOps. $(publish_artifact)
publishxlif: False # Publish generated XLIF to DevOps. $(publishxlif)
failed_on_warnings: False # Fail task when any warning occurs. $(failed_on_warnings)
failonany: False # Fail task when any message occurs. $(failonany)
app_file_suffix: # Set a suffix tag on the compiled App filename. $(app_file_suffix)
updatebuildnumber: True # Update the Build number with the current version. $(updatebuildnumber)
setup_working_folder: False # Copy working folder to Docker container. $(setup_working_folder)
showmycode: Keep # Overrule ShowMyCode by setting other option than 'Keep'. $(showmycode)
resourceexposurepolicy_allowdebugging: Keep# Overrule allowDebugging by setting other option than 'Keep'. $(resourceexposurepolicy_allowdebugging)
resourceexposurepolicy_allowdownloadingsource: Keep# Overrule allowDownloadingSource by setting other option than 'Keep'. $(resourceexposurepolicy_allowdownloadingsource)
resourceexposurepolicy_includesourceinsymbolfile: Keep# Overrule includeSourceInSymbolFile by setting other option than 'Keep'. $(resourceexposurepolicy_includesourceinsymbolfile)
internalsvisibleto: Keep # Remove internalsVisibleTo by setting other option than 'Keep'. $(internalsvisibleto)
preprocessorsymbols: # Overwrite the preprocessorSymbols in app.json, comma seperated string. Set to 'NONE' to remove. $(preprocessorsymbols)
applicationinsightskey: # Overwrite the ApplicationInsightsKey in app.json. Set to 'NONE' to remove InsightsKey. $(applicationinsightskey)
printappmanifest: True # Print the final app.json before compile. $(printappmanifest)
output_alc_logs: True # Output ALC logs. $(output_alc_logs)
additionalprobingpaths: # Add additional Assembly probing Paths. $(additionalprobingpaths)
enable_external_rulesets: False # Enable External Rulesets. $(enable_external_rulesets)
allowed_publisher_names: # Allowed Publisher names. $(allowed_publisher_names)
allowed_publisher_names_separator: , # Allowed Publisher names Separator. $(allowed_publisher_names_separator)
generatereportlayouts: True # Set Generate Report Layouts compiler option. $(generatereportlayouts)
alc_continuebuildonerror: False # Set ALC Continue Build On Error option. $(alc_continuebuildonerror)
alc_errorlog: False # Set ALC Error Log option. $(alc_errorlog)
pwsh: False # Run task in Powershell Core. $(pwsh)
ALOps Docker Create
- Create Docker image based on NAV/BC Artifacts.
- YAML Template:
- task: ALOpsDockerCreate@1
displayName: 'ALOps Docker Create'
inputs:
artifactspecification: Specific # Set Artifact resolve method. $(artifactspecification)
artifactversion: # BC/NAV Version, eg: 9, 10.4, NAV2016, 16.4.24524. $(artifactversion)
artifacttype: OnPrem # Set Artifact Type. $(artifacttype)
artifactcountry: # The Country for the Artifact. $(artifactcountry)
versionselect: Latest # The version to be selected from the Artifacts. $(versionselect)
artifacthint: # . $(artifacthint)
multitenant: False # Create a Multi-Tenant image. $(multitenant)
memory: 8G # Set maximum memory for Container. $(memory)
imageprefix: myImage # New image name, tag defined by $(imagenametemplate). $(imageprefix)
dockerregistry: # Docker registry Pull/Push, example: 'bcinsider.azurecr.io', or 'repo.mydomain.com' $(dockerregistry)
dockerusername: # Docker login username. $(dockerusername)
dockerpassword: # Docker login password. $(dockerpassword)
storageaccount: # Non Default Storage Account. $(storageaccount)
sastoken: # SAS Token used to access Storage Account. $(sastoken)
forcecreateimage: False # Forces image creation, skipping Pull image. $(forcecreateimage)
myscripts: # Specify myScripts to be added to the image. $(myscripts)
imagenametemplate: %IMAGE_PREFIX%:%ARTIFACT_TYPE%-%ARTIFACT_VERSION%-%ARTIFACT_COUNTRY%-%OS_VERSION%-%OS_LTSC%# Template for defining Image names or using a fixed name $(imagenametemplate)
use_generic_image: # The base image to use for Image creation. $(use_generic_image)
licensefile: # BC License File to be included in the Image $(licensefile)
includetesttoolkit: False # Included the TestToolkit in created image. $(includetesttoolkit)
includetestlibrariesonly: False # Included only the Test-Libraries in created image. $(includetestlibrariesonly)
includetestframeworkonly: False # Included only the Test-Framework in created image. $(includetestframeworkonly)
includeperformancetoolkit: False # Include Performance-Toolkit in created image. $(includeperformancetoolkit)
accept_insider_eula: False # Accept Insider EULA. $(accept_insider_eula)
alternativeartifacturl: # Overrule the ArtifactUrl which would be determined by [artifacttype/artifactcountry/versionselect]. $(alternativeartifacturl)
ALOps Docker Execute
ALOps Docker Remove
ALOps Docker Start
- Start Business Central docker container.
- YAML Template:
- task: ALOpsDockerStart@1
displayName: 'ALOps Docker Start'
inputs:
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
ignore_no_container_warning: False # Do not trigger warning when container with [fixed_tag] is not found. $(ignore_no_container_warning)
docker_image: $(ALOPS_BC_IMAGE) # Business Central docker Image to Start. $(docker_image)
accept_image_eula: True # Accept Eula of docker image. $(accept_image_eula)
accept_image_outdated: True # Accept Outdated image. $(accept_image_outdated)
enable_symbol_loading: False # Enable Symbol Loading. $(enable_symbol_loading)
enable_api_services: False # Enable API Services. $(enable_api_services)
multitenant: False # Create a Multi-Tenant container. $(multitenant)
docker_pull: True # Force Pull docker image. $(docker_pull)
dockerauthentication: None # Set authentication Method to use. $(dockerauthentication)
docker_login: # Select the generic login to use for docker. If needed, click on 'manage', and add a new Service Endpoint of type 'Generic' $(docker_login)
docker_username: # Docker login username. $(docker_username)
docker_password: # Docker login password. $(docker_password)
docker_registry: # Docker registry for login, example: 'bcinsider.azurecr.io' $(docker_registry)
memory_gb: -1 # Set maximum memory for container in GB. $(memory_gb)
container_restart: no # Set docker container restart preference. $(container_restart)
licensefile: # Set the BC License File. Path or Url. $(licensefile)
docker_parameters: # Specify additional docker parameters. $(docker_parameters)
sql_server: # External SQL Server. $(sql_server)
sql_server_instance: # External SQL Server Instance. $(sql_server_instance)
sql_database: # External SQL Database. $(sql_database)
sql_database_user: # External SQL Database User. $(sql_database_user)
sql_database_user_password: # External SQL Database Password. $(sql_database_user_password)
sql_backup_file: # Restore BAK file on startup. $(sql_backup_file)
encryption_key: # Encryption key for Service Tier. $(encryption_key)
taskscheduler: Keep # Overrule EnableTaskScheduler by setting other option than 'Keep'. $(taskscheduler)
keyvault_pfxfile: # KeyVault PFX File. $(keyvault_pfxfile)
keyvault_pfxpassword: # KeyVault PFX Password. $(keyvault_pfxpassword)
keyvault_clientid: # KeyVault ClientID. $(keyvault_clientid)
keyvault_publisher_validation: False # Keyvault Publisher Validation. $(keyvault_publisher_validation)
ALOps Docker Wait
ALOps Extension API
- Get/Publish extensions with the Business Central API.
- YAML Template:
- task: ALOpsExtensionAPI@1
displayName: 'ALOps Extension API'
inputs:
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
interaction: get # Set Interaction Method to use. (Get/Publish/Batch Publish). $(interaction)
api_endpoint: https://api.businesscentral.dynamics.com/v2.0/$(azure_tenant_id)/Sandbox/api# Set API Endpoint. (protocol://host:port/serverinstance/api) $(api_endpoint)
dev_endpoint: # Set DEV Endpoint. (protocol://host:port/serverinstance/dev) $(dev_endpoint)
dev_schemeupdatemode: synchronize # Set Schema Update Mode to use with DEVPort deploy. (synchronize/recreate/forcesync) $(dev_schemeupdatemode)
dev_dependencypublishingoption: none # Set Dependency Publishing Option for DEV Endpoint. $(dev_dependencypublishingoption)
apiversion: v1.0 # Version of the API to use (beta / v1.0 / v2.0) $(apiversion)
authentication: oauth # Set authentication Method to use. Default [Windows]. $(authentication)
azure_tenant_id: # Azure Tenant Id. Only required for BC SaaS $(azure_tenant_id)
azure_app_client_id: # Azure AD Application Client Id. $(azure_app_client_id)
azure_app_client_secret: # Azure AD Application Client Secret. $(azure_app_client_secret)
azure_app_client_certificate: # Azure AD Application Client Certificate. $(azure_app_client_certificate)
azure_app_client_certificate_password: # Azure AD Application Client Certificate Password. $(azure_app_client_certificate_password)
username: # Business Central Username. Leave empty for Service-2-Service authentication. $(username)
password: # Business Central User Password. Leave empty for Service-2-Service authentication. $(password)
bccompany: # Business Central Company (Id or Name). $(bccompany)
artifact_path: $(System.ArtifactsDirectory)# Path for App Artifact. If using 'Multistate Pipeline', use '$(Pipeline.Workspace)' instead. $(artifact_path)
artifact_filter: *.app # Filter used for locating App file relative to $(path_to_publish). $(artifact_filter)
showdeploymentstatus: True # Show Extension Deployment Status. $(showdeploymentstatus)
vsix_only: False # Only use VSIX, do not use BC-Artifacts. $(vsix_only)
checksecondsdelay: 30 # Seconds of delay betweel deployment status checks. $(checksecondsdelay)
maxtries: 20 # Max tries for status check. $(maxtries)
replacepackageid: False # Force a new PackageID for each deployment. $(replacepackageid)
blocksymbolsonly: False # Check App, block if SymbolsOnly App. $(blocksymbolsonly)
schedule: current # Set the Schedule. Requires API Version 2.0 $(schedule)
schema_sync_mode: add # Set the Schema Update Mode. Requires API Version 2.0 $(schema_sync_mode)
pwsh: False # Run task in Powershell Core. $(pwsh)
ALOps Import FOB
ALOps Info
ALOps License Import
ALOps Nuget Download
ALOps Nuget Publish
ALOps OpenAPI
ALOps Package Import
ALOps App Publish
- Publish Business Central extension to service tier.
- YAML Template:
- task: ALOpsAppPublish@1
displayName: 'ALOps App Publish'
inputs:
usedocker: False # Run task in Docker container. $(usedocker)
fixed_tag: # Allows recycling of docker containers. $(fixed_tag)
installpublishedapps: True # Install Published Applications. $(installpublishedapps)
installaltesttool: False # Install the AL TestTool for v15. $(installaltesttool)
install_al_app_names: Tests-TestLibraries
System Application Test
System Application Test Library
Any
Library Assert
Test Runner
# Specify additional docker parameters. $(install_al_app_names)
strictappnames: False # Only install Specified Apps. $(strictappnames)
nav_serverinstance: BC140 # Business Central Server Instance Name. $(nav_serverinstance)
artifact_path: # Path for storing App Artifact. $(artifact_path)
nav_artifact_app_filter: *.app # Filter used for locating App file relative to $(path_to_publish). $(nav_artifact_app_filter)
skip_verification: True # Skip CodeSign Verification of Business Central App. $(skip_verification)
forceinstall: False # Always install Apps regards of current state. $(forceinstall)
forcesync: False # Sets the Sync-Mode to Force, enables pushing breaking changes. $(forcesync)
publish_scope: Global # Set the scope for publishing extensions. $(publish_scope)
tenant: default # Tenant to publish to when Scope is set to Tenant. $(tenant)
batch_publish_folder: # Path containing Apps to publish. $(batch_publish_folder)
publisherazureactivedirectorytenantid: # Publisher Azure AD TenantId. $(publisherazureactivedirectorytenantid)
blocksymbolsonly: False # Check App, block if SymbolsOnly App. $(blocksymbolsonly)
pwsh: False # Run task in Powershell Core. $(pwsh)
ALOps Repository Publish Extension
ALOps SaaS Get Extensions
ALOps SaaS Publish Extension
Here is some more information about Microsoft Dynamics 365 Business Central
| |