---
url: 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/ci-cd'
title: 'CI/CD integration | DXPR'
author:
  name: docs-sync
  url: 'https://dxpr.com/users/docs-sync'
date: '2026-10-23T14:31:17+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'Build, test and deploy the module with a pipeline'
tags:
  - 'Run it in production'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-23T14:31:17+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'CI/CD integration'
      description: 'Build, test and deploy the module with a pipeline'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-23T14:31:17+0000'
      dateModified: '2026-10-23T14:31:17+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/ci-cd'
      articleSection: 'Run it in production'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/ci-cd'
      description: 'Build, test and deploy the module with a pipeline'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Home
            item: 'https://dxpr.com/'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: en
---
[Help Center](/hc)/[Documentation](/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Manage the site](/hc/documentation/learn-dxpr-builder/manage) /[Run it in production](/hc/documentation/learn-dxpr-builder/manage/production) # CI/CD integration.

Build, test and deploy the module with a pipeline

 Learn DXPR BuilderManage the siteRun it in production

   ## In this guide

 Related guides

- [Content staging](/hc/documentation/learn-dxpr-builder/advanced/content-staging)

DXPR Builder content is stored in Drupal text fields and configuration entities. This page explains how to include DXPR Builder content in your CI/CD pipeline and deployment workflows.

## Content storage

DXPR Builder stores its data in the database and in configuration:

| Data type | Storage | Deployment method |
|---|---|---|
| Page content | Text field values (database) | Content sync or migration |
| Page templates | Config entities | Config export/import |
| User templates | Config entities | Config export/import |
| Settings | Config; holds the product key under **Configuration storage** | Config export/import once the key is in a Key entity; see below |
| User profiles | Config entities | Config export/import |
| Product key | Settings, or a Key entity holding or pointing to the key | Per environment; see below |

## Configuration management

DXPR Builder settings and templates are Drupal configuration. Deploy them with standard Drupal configuration management.

### Export

```bash
drush config:export

```

This exports these DXPR Builder config files:

- `dxpr_builder.settings.yml`
- `dxpr_builder.dxpr_builder_profile.*.yml`
- `dxpr_builder.page_template.*.yml`
- `dxpr_builder.user_template.*.yml`
- `key.key.dxpr_builder_jwt.yml`, or the Key entity selected for the product key

Do not commit `dxpr_builder.settings.yml` while the product key is in it; see [Product keys](#product-keys) below.

### Import

```bash
drush config:import

```

### CI pipeline example

`drush deploy` runs the database updates, imports configuration and rebuilds caches in the right order. DXPR Builder releases convert content in their database updates, so run them on every deploy.

```yaml
deploy:
  script:
    - drush deploy -y

```

## Content deployment

Page content (the HTML in text fields) is database content, not configuration. Options for deploying content between environments:

### Default Content module

Export content as YAML files and import them on the target environment.

### Content Synchronization

Use the Content Synchronization module (`content_sync`) to export and import content entities.

### Database synchronisation

Copy the database from one environment to another:

```bash
drush sql:sync @source @target

```

## Environment-specific considerations

### File paths

DXPR Builder content references uploaded images by file path. Sync the files directory between environments.

### Product keys

Each environment needs a valid product key. Under the default **Configuration storage**, `dxpr_builder.settings.yml` holds that key in clear text, as `json_web_token`. Before the file goes into your repository:

1. Create a Key whose provider reads an environment variable or a file, at **Configuration** &gt; **System** &gt; **Keys**(`/admin/config/system/keys`).
2. At **DXPR Studio** &gt; **DXPR Builder** &gt; **General Settings**(`/admin/dxpr_studio/dxpr_builder/settings`), set **Storage method** to **Key module**, choose that key under **Key** and click **Save settings**. This clears `json_web_token`.
3. Export the configuration again and check that `dxpr_builder.settings.yml` no longer contains the key.

A Key with the **Configuration** provider stores the value in its own exported file, so it is not safe to commit either.

## What's next?

[Content staging between environments](/hc/documentation/learn-dxpr-builder/advanced/content-staging) to continue exploring DXPR Builder.