Skip to main content
This is part of our database GitOps series with Bytebase:
This tutorial shows you how to build a database GitOps workflow using Azure DevOps Pipeline and Bytebase API. You’ll learn to create a streamlined database release workflow where you can:
  • Submit SQL migrations through Azure DevOps
  • Automatically run SQL reviews on pull requests
  • Auto-create and deploy Bytebase releases when merging to main
While we use Azure DevOps Pipeline in this guide, you can apply these concepts to other CI platforms like GitHub Actions, GitLab CI, or Bitbucket Pipelines using the Bytebase API. This tutorial code repository is at https://dev.azure.com/bytebase-hq/_git/bytebase-example

Prerequisites

  • A Bytebase instance (Bytebase Cloud or self-hosted)
  • For self-hosted version, you need Docker to run Bytebase

Automatic Rollout across environments

Step 1 - Set up Bytebase

  • Cloud
  • Self-Hosted
Use Bytebase Cloud for instant setup without infrastructure management. CI/CD services can connect immediately.Best for: Quick testing, evaluation, and small teams
See Network Architecture guide.

Step 2 - Create Service Account

  1. Log in as Workspace Admin, and go to IAM & Admin > Users & Groups. Click + Add User, fill in with api-sample, and assign the Workspace Member and GitOps Service Agent roles, which are sufficient for this tutorial, then click Confirm.
  2. Find the newly created service account and Copy Service Key. We will use this token to authenticate the API calls. service-account-key

Step 3 - Configure SQL Review in Bytebase

Since you will need to run SQL review on your PRs, you need to configure the SQL review in Bytebase.
  1. Go to CI/CD > SQL Review, click Create SQL Review.
  2. Select the Sample Template and click Next. bb-sql-review-sample
  3. Select Prod environment as the attached resources and click Confirm. Now the SQL review is enabled for the Prod environment. bb-sql-review-prod

Step 4 - Copy from the Example Repository and Configure Variables

  1. Create a new project. Copy pipelines folder from https://dev.azure.com/bytebase-hq/_git/bytebase-example. There are two workflows in this repository:
    • pipelines/sql-review.yml: Lint the SQL migration files after the PR is created.
    • pipelines/rollout-release.yml: Create a release in Bytebase after the PR is merged to the main branch.
  2. Go into pipelines/sql-review.yml and pipelines/rollout-release.yml. In the env section, replace the variable values with your own and commit the changes.
    • BYTEBASE_URL: Your Bytebase instance URL (e.g., https://bytebase.your-company.com or your Bytebase Cloud URL)
    • BYTEBASE_SERVICE_ACCOUNT: api-example@service.bytebase.com (the service account you created in the previous step)
    • BYTEBASE_PROJECT: projects/project-sample (the sample project in the Bytebase)
    • BYTEBASE_TARGETS: instances/test-sample-instance/databases/hr_test,instances/prod-sample-instance/databases/hr_prod (the two default databases in the sample project)
    • FILE_PATTERN: migrations/*.sql (the pattern of the migration files)
  3. Go to branch policy for main branch, add check-release as a required check. You don’t need to add rollout-release as a required check because it will be triggered automatically when the PR is merged. ad-branch-policy ad-policy-build
In pipelines/rollout-release.yml, pay attention to BYTEBASE_TARGETS in deploy-to-test stage. You should put all the databases including both Test and Prod environments. NOT ONLY the Test database.

Step 5 - Create the migration files

To create migration files to trigger release creation, the files have to match the following pattern:
  • A migration file should start with digits, which is also its version. e.g. 202503131500_create_table_t1_ddl.sql.
  • A migration file may end with ‘ddl’ or ‘dml’ to indicate its change type. If it doesn’t end with any of the two, its change type is DDL by default.
  1. Within your forked repository, create the following migration files under migrations directory:
    • 202503131500_create_table_t1_ddl.sql
    CREATE TABLE t1 (
     id SERIAL PRIMARY KEY,
     name TEXT
    );
    
  2. Commit to a new branch and create a pull request, the check-release workflow will be triggered. There will be a warning in the SQL review result. ad-check-pass ad-check-warning
  3. According to the SQL review result, you can do some changes to the SQL files and push to the branch. Then you should see the SQL review has passed. There are no warnings in the SQL review result.
     CREATE TABLE t1 (
     id SERIAL PRIMARY KEY,
     name TEXT NOT NULL
    );
    
    ad-check-no-warning
  4. When the SQL review is passed, you can merge the pull request. The rollout-release workflow will be triggered to create a release in Bytebase and then deploy automatically. ad-rollout
  5. You need to permit the release to be deployed to the production environment the first time. ad-rollout-permit ad-rollout-prod
  6. If you click the test stage and expand the different sections, you can follow the links to Bytebase. bb-rollout-preview
  7. You may customize the workflow file to trigger deployment manually according to your needs.

Summary

Now you have learned how to database GitOps with Azure DevOps Pipeline. If you want to trigger a release creation with other git providers (e.g. GitLab, Bitbucket, GitHub Actions), you may customize the workflow file.