借助数据库分支和部署请求工作流程,PlanetScale 的构建已经充分考虑到 DevOps 管道。然而,从事过足够长时间 DevOps 工作的人都知道,这是一种”选择自己冒险”的实践方式。尽管存在一些指导原则,但许多公司根据产品需求以非常不同的方式构建其管道。而将 PlanetScale 集成到这个流程中也不例外。今天,我们发布了首批官方 PlanetScale GitHub Actions,以降低项目集成的门槛。

什么是 GitHub Actions?

在介绍现有的 Actions 之前,值得先了解什么是 GitHub Actions。GitHub Actions 允许你在代码仓库中直接通过定义 YAML 文件中的任务自动化流程。任务会基于你定义的触发器执行,你的 YAML 文件被称为”工作流(workflows)”,其中的操作被称为”步骤(steps)”。开发者可以通过 Bash 或 PowerShell 手动编写自己的步骤,也可以在 GitHub Actions Marketplace 搜索预定义的步骤,从而避免自己构建所需功能。

setup-pscale-action GitHub Action

planetscale/setup-pscale-action 使 pscale(即 PlanetScale CLI 工具)能够在 GitHub Actions 工作流中使用。
安装后,你可以在 Linux、Windows 或 Mac runner 中利用 pscale 自动化工作流,例如:

  • 创建数据库分支
  • 为分支创建密码并连接到数据库
  • 创建部署请求
  • 自动在 GitHub pull request 上添加 schema diff 的评论
  • 以及更多功能……

下面是一些实际示例。

示例 1:在创建 GitHub 分支时创建新的数据库分支

假如你的团队每次在 GitHub 仓库中创建功能分支时都会创建对应的数据库分支,你可以使用 pscale 创建分支并生成密码。分支凭据随后可以作为环境变量用于预览或暂存环境。

- name: Create branch
  env:
    PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
    PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
  run: |
    set +e
    pscale branch show ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.PSCALE_BRANCH_NAME }}
    exit_code=$?
    set -e

    if [ $exit_code -eq 0 ]; then
      echo "Branch exists. Skipping branch creation."
    else
      echo "Branch does not exist. Creating."
      pscale branch create ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.PSCALE_BRANCH_NAME }} --wait
    fi

注意,我们首先检查分支是否存在。如果存在则无需进行操作,否则会创建该分支并添加 --wait 参数。
这对 CI 环境非常有用,因为工作流可能会运行多次,而如果你在创建分支后立即运行 schema migrations,那么确保分支已准备好至关重要。

示例 2:为分支创建密码

你可以使用 pscale password create 为数据库分支生成凭据。

- name: Generate password for branch
  env:
    PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
    PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
  run: |
    response=$(pscale password create ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.PSCALE_BRANCH_NAME }} -f json)

    id=$(echo "$response" | jq -r '.id')
    host=$(echo "$response" | jq -r '.access_host_url')
    username=$(echo "$response" | jq -r '.username')
    password=$(echo "$response" | jq -r '.plain_text')
    ssl_mode="verify_identity"  # Assuming a default value for ssl_mode
    ssl_ca="/etc/ssl/certs/ca-certificates.crt"  # Assuming a default value for ssl_ca

    # Set the password ID, allows us to later delete it if wanted.
    echo "PASSWORD_ID=$id" >> $GITHUB_ENV

    # Create the DATABASE_URL
    database_url="mysql://$username:$password@$host/${{ secrets.PLANETSCALE_DATABASE_NAME }}?sslmode=$ssl_mode&sslca=$ssl_ca"
    echo "DATABASE_URL=$database_url" >> $GITHUB_ENV
    echo "::add-mask::$DATABASE_URL"
- name: Use the DATABASE_URL in a subsequent step
  run: |
    echo "Using DATABASE_URL: $DATABASE_URL"

以上示例展示了如何创建分支密码并以 JSON 格式返回响应。然后解析 JSON 创建 DATABASE_URL,此后可以在后续步骤中使用,比如作为预览环境的数据库或运行 GitHub pull request 中包含的迁移。

示例 3:打开部署请求

你可以使用 pscale deploy-request create 在 GitHub Actions 中打开新的部署请求。此功能在迁移 schema 至分支后特别有用。

- name: Open DR if migrations
  env:
    PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
    PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
  run: pscale deploy-request create ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.PSCALE_BRANCH_NAME }}

示例 4:获取部署请求的差异并在 pull request 上评论

可以使用 pscale deploy-request diff 查看部署请求的完整 schema差异。
以下示例展示了如何结合打开 Git 分支的部署请求,然后自动将差异以评论形式反馈到 GitHub pull request 中。

- name: Comment on PR
  env:
    PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
    PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
  run: |
    echo "Deploy request opened: https://app.planetscale.com/${{ secrets.PLANETSCALE_ORG_NAME }}/${{ secrets.PLANETSCALE_DATABASE_NAME }}/deploy-requests/${{ env.DEPLOY_REQUEST_NUMBER }}" >> migration-message.txt
    echo "" >> migration-message.txt
    echo "\`\`\`diff" >> migration-message.txt
    pscale deploy-request diff ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.DEPLOY_REQUEST_NUMBER }}  -f json | jq -r '.[].raw' >> migration-message.txt
    echo "\`\`\`" >> migration-message.txt
- name: Comment PR - db migrated
  uses: thollander/actions-comment-pull-request@v2
  with:
    filePath: migration-message.txt

该代码将差异写入 migration-message.txt 文件,并随后在触发工作流的 pull request 内创建评论。

结论

通过首批官方 PlanetScale GitHub Actions 的发布,开发者可以更轻松地将 PlanetScale 集成到他们的 DevOps 管道中,同时利用自动化来加速开发过程。这些 Actions 不仅简化了数据库分支的创建和密码管理,还支持部署请求和 pull request 的反馈等功能,为项目工作流带来了更多灵活性和便利。



宣布 PlanetScale GitHub Actions 的发布插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.choupangxia.com/2025/09/13/planetscale-github-actions/