> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paradime.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Continuous Deployment with Azure Pipelines

> Trigger a Paradime Bolt CD schedule from an Azure Pipeline on merge to deploy dbt™ changes to production using the Bolt API and Account API keys.

export const Arcade = ({src, title}) => <div style={{
  position: 'relative',
  paddingBottom: 'calc(56.2225% + 41px)',
  height: 0,
  width: '100%'
}}>
    <iframe src={src} title={title} frameBorder="0" loading="lazy" allow="clipboard-write" allowFullScreen style={{
  position: 'absolute',
  top: 0,
  left: 0,
  width: '100%',
  height: '100%',
  colorScheme: 'light'
}} />
  </div>;

Build custom Continuous Deployment jobs with Azure Pipelines and the [Bolt API](/products/bolt/bolt-api). First [set up the CD Bolt schedule](/products/bolt/ci-cd/continuous-deployment/index#set-up-the-cd-bolt-schedule) and note its slug, then trigger it from your pipeline on merge.

## Generate API keys

To trigger Bolt from your pipeline, generate a Paradime [API key](/developers/api-keys) with the **Bolt schedules admin** capability. Generate an **Account API key** (a `prdm_cmp_...` Bearer token) and save the token, your **workspace token**, and the **API endpoint**; you will add them as CI/CD variables in the next step.

<Card title="Generate API keys" href="/developers/api-keys" horizontal icon="arrow-right" />

## Create an Azure Pipeline

Create an `azure-pipelines.yml` file in your dbt™ repository and enter the values required.

```yaml title="azure-pipelines.yml" lineNumbers theme={"system"}
# Run when changes are pushed to main
trigger:
 - main

variables:
 # Slug of the Paradime schedule to run
 - name: PARADIME_SCHEDULE_SLUG
   value: "flowing-pachy-wyy4fs"

steps:
 - task: UsePythonVersion@0
   inputs:
     versionSpec: "3.11"
     addToPath: true
   displayName: Use Python 3.11

 - script: |
     pip install paradime-io

     # $(VARIABLE) references Azure Pipeline variables
     export PARADIME_API_ENDPOINT=$(PARADIME_API_ENDPOINT)
     export PARADIME_WORKSPACE_UID=$(PARADIME_WORKSPACE_UID)
     export PARADIME_API_SECRET=$(PARADIME_API_SECRET)

     paradime bolt run "$(PARADIME_SCHEDULE_SLUG)" --wait
   displayName: "Run Paradime CD"
```

## Add the variables in Azure Pipelines

Add these as Azure Pipeline variables:

* `PARADIME_API_SECRET` — your account API key (`prdm_cmp_...`)
* `PARADIME_WORKSPACE_UID` — your workspace token
* `PARADIME_API_ENDPOINT`

<Arcade src="https://demo.arcade.software/tCJyMGYsHX7weycpd3kq?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true" title="Using Azure Pipelines" />


## Related topics

- [Continuous Deployment with BitBucket Pipelines](/products/bolt/ci-cd/continuous-deployment/bitbucket.md)
- [Continuous Deployment with GitLab Pipelines](/products/bolt/ci-cd/continuous-deployment/gitlab.md)
- [Continuous Deployment](/products/bolt/ci-cd/continuous-deployment/index.md)
- [Bolt CI/CD for dbt™ pull requests and deploys](/products/bolt/ci-cd/index.md)
- [Continuous Deployment with GitHub for dbt™](/products/bolt/ci-cd/continuous-deployment/github.md)
