We use Azure DevOps pipeline to achieve CI/CD for MLOps. It supports various features to cover many scenarios.
- Trigger
- Template
- Logging
- Rich UI
Even though Azure DevOps pipeline supports implicit trigger which we can omit trigger section, we explicitly describe trigger in each pipeline YAML to have full control when an Azure DevOps pipeline runs.
We also use "include" keywords first, then use "exclude" if necessary in sub-folders/files.
trigger:
branches:
include:
- main
paths:
include:
- samples/yesno/ml_model
- samples/yesno/ml_serviceAzure DevOps support templating some tasks for re-usability. We use templated YAML to avoid duplicate code. Templated YAML file contains '-template' as part of its name.
Each Azure DevOps pipelines should include code quality check and publish the test results so that operators can confirm it via portal
Sample contains code-quality-template.yml to demonstrate:
- Run linter and generate report
- Run unit test and generate report
- Publish test result
- Publish code coverage report
This is templated yaml so that we can easily reuse the yaml in multiple pipelines.
Azure DevOps support variables YAML as templated YAML which contains only variables and can be re-used in multiple pipelines. Variable YAML file contains '-variables' as part of its name.
variables:
- template: yesno-variables-template.ymlWe store secure variables in KeyVault and use KeyVault task to retrieve the value. We use explicit filter criteria to only retrieve required variables form the KeyVault
- task: AzureKeyVault@1
displayName: Azure Key Vault
inputs:
azureSubscription: '$(AZURE_RM_SVC_CONNECTION)'
keyVaultName: '$(KEYVAULT_NAME)'
secretsFilter: aml-storage-account-key,acr-password
runAsPreJob: falseSome variables reside in Azure DevOps Pipeline Library, which we can set pipeline to read them by using group for variables
variables:
- group: iac-aml-vgAzure DevOps supports service connection to simplify authentication process for various Azure resources. We use service connection for Azure Resource Group.
Azure DevOps pipeline support stage concept by which we can group related tasks into a stage. We use stage to distinguish test, deploy to dev and deploy to stage. See Azure DevOps Stages for more detail.
Azure DevOps pipeline uses virtual machines to run the pipeline. Microsoft provides Microsoft-hosted agents as pool, and you can also provision own VM as self-hosted agents.
If you run long running build process, like build docker image, you can create your own agent and register it as pool. See Azure Pipelines agents for more detail.