> ## 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 GitLab Pipelines

> Trigger a Paradime Bolt CD schedule from a GitLab 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 GitLab 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 a GitLab pipeline

Create a `.gitlab-ci.yml` file at the root of your dbt™ repository and enter the values required.

```yaml title=".gitlab-ci.yml" lineNumbers theme={"system"}
stages:
  - paradime_continuous_deployment

paradime_continuous_deployment:
  stage: paradime_continuous_deployment
  image: python:3.11

  # Run only when a merge request is merged into main
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_EVENT_TYPE == "merged" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'

  variables:
    PARADIME_WORKSPACE_UID: ${PARADIME_WORKSPACE_UID}   # Workspace token (workspace UID)
    PARADIME_API_SECRET: ${PARADIME_API_SECRET}         # Account API key (prdm_cmp_...)
    PARADIME_API_ENDPOINT: ${PARADIME_API_ENDPOINT}     # Paradime API endpoint URL
    PARADIME_SCHEDULE_SLUG: "flowing-pachy-wyy4fs"      # Slug of the Paradime schedule to run
  before_script:
    - pip install paradime-io
  script: |
    paradime bolt run "$PARADIME_SCHEDULE_SLUG" --wait
  timeout: 60 minutes
```

## Add the variables in GitLab

Add these as GitLab CI/CD 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/UcTn34OhEg5OwXDVOKVu?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true" title="Using GitLab Pipelines" />


## Related topics

- [Turbo CI on GitLab merge requests](/products/bolt/ci-cd/turbo-ci/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)
- [GitLab](/products/settings/git-repositories/importing-a-repository/gitlab.md)
- [Column-Level Lineage Diff on GitLab](/products/bolt/ci-cd/lineage-diff/gitlab.md)
