宣布 PlanetScale GitHub Actions 的发布
借助数据库分支和部署请求工作流程,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 的反馈等功能,为项目工作流带来了更多灵活性和便利。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://folen.top/2025/09/13/planetscale-github-actions/