通过 GitHub Actions 部署到 Square Cloud

每次推送、发布发行版或手动运行时,官方 Action 都会在运行器上安装 Square Cloud CLI、完成校验,并把你的代码发送到你的应用。

支持 Linux、Windows 和 macOS 运行器,x64 与 arm64 均可。源代码已在 GitHub 上公开。

三步实现每次推送自动部署

只需在仓库中保存两个值,再添加一个工作流文件。之后每次推送到 main,代码都会发送到你的应用并重启它。

  1. 1

    将 API 密钥存为机密

    在账户的安全设置中创建 API 密钥,并在仓库中将其保存为机密 SQUARECLOUD_API_KEY。

  2. 2

    保存应用 ID

    从控制台的应用页面复制 ID,并将其保存为仓库变量 SQUARECLOUD_APP_ID。

  3. 3

    添加工作流

    将下面的文件提交为 .github/workflows/deploy.yml。下次推送到 main 时就会部署你的应用。

.github/workflows/deploy.yml
name: Deployon:  push:    branches: [main]jobs:  deploy:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v7      - uses: squarecloudofc/github-action@v2        with:          token: ${{ secrets.SQUARECLOUD_API_KEY }}          command: commit ${{ vars.SQUARECLOUD_APP_ID }} --restart
  • 保留 checkout 步骤

    没有 actions/checkout,运行器就没有可发送的文件。

  • 已停止?也会启动

    --restart 会在上传后重启应用,如果应用已停止则会启动它。不加此参数时,新文件要到下次重启才会生效。

  • ID 可以放在文件夹中

    未提供 ID 时,commit 会读取文件夹中 squarecloud.app(如果存在)的 ID= 行,因此只写 commit --restart 即可。

Action 在运行器上做了什么

在每个运行器上按此顺序完成四个步骤。任何一步失败,工作流步骤也会失败,所以没有真正完成的部署绝不会显示为绿色。

  1. 1

    下载适合运行器的构建

    根据运行器的系统和处理器选择 CLI 发行版:最新版,或你固定的版本。自建运行器会将其保存在工具缓存中。

  2. 2

    安装前先校验

    下载文件的 SHA-256 会与发行版的 checksums.txt 比对。不匹配的文件绝不会被安装或运行。

  3. 3

    传递密钥但不保存

    密钥会在日志中被屏蔽,并在作业的剩余步骤中设置为 SQUARECLOUD_API_KEY。不会向运行器的磁盘写入任何内容。

  4. 4

    运行你的命令

    squarecloud 加上你的 command 会在 workdir 中运行。命令失败时,该步骤也会失败。

适合各种发布方式的工作流

四种来自 Action 文档的模式,可直接复制。高亮的行就是相对上面工作流的改动。

  • 预发布与生产环境

    推送到 main 会部署到生产环境,推送到 develop 会部署到预发布环境,各自对应独立的应用。

    • Actions 标签页中的 Run workflow 按钮可以部署你选择的分支
    • concurrency 让同一分支的部署依次等待,而不是相互重叠
    .github/workflows/deploy.yml
    name: Deployon:  push:    branches: [main, develop]  workflow_dispatch:concurrency:  group: deploy-${{ github.ref_name }}jobs:  deploy:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v7      - uses: squarecloudofc/github-action@v2        with:          token: ${{ secrets.SQUARECLOUD_API_KEY }}          command: commit ${{ github.ref_name == 'main' && vars.PRODUCTION_APP_ID || vars.STAGING_APP_ID }} --restart
  • 一个仓库中的多个应用

    每个文件夹都是独立的应用。矩阵会并行部署它们,每个文件夹一个作业。

    • workdir 将每次部署指向对应的文件夹
    • fail-fast: false 让一次部署失败时不会取消其他部署
    .github/workflows/deploy.yml
    name: Deployon:  push:    branches: [main]jobs:  deploy:    runs-on: ubuntu-latest    strategy:      fail-fast: false      matrix:        include:          - folder: bot            app: ${{ vars.BOT_APP_ID }}          - folder: website            app: ${{ vars.WEBSITE_APP_ID }}    steps:      - uses: actions/checkout@v7      - uses: squarecloudofc/github-action@v2        with:          token: ${{ secrets.SQUARECLOUD_API_KEY }}          workdir: ${{ matrix.folder }}          command: commit ${{ matrix.app }} --restart
  • 发布发行版时部署

    只有已发布发行版的代码才会到达应用。

    • 推送和草稿发行版不会触发部署
    .github/workflows/deploy.yml
    name: Deployon:  release:    types: [published]jobs:  deploy:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v7      - uses: squarecloudofc/github-action@v2        with:          token: ${{ secrets.SQUARECLOUD_API_KEY }}          command: commit ${{ vars.SQUARECLOUD_APP_ID }} --restart
  • 从机密设置环境变量

    把令牌和密码保存在 GitHub 机密中,并在每次部署前发送到应用。env set 只添加或更新它列出的变量,commit 之后的重启会加载它们。

    • 从 CLI 3.1.1 起,包含空格或 $、&、;、| 等字符的值,会与机密中保存的内容完全一致
    • 使用 CLI 3.1.0 时,请自行用单引号包住每个值
    • 通过 env 传递机密,可以让它们的值不出现在 GitHub 运行的脚本中
    jobs.deploy.steps
    - uses: squarecloudofc/github-action@v2  with:    token: ${{ secrets.SQUARECLOUD_API_KEY }}    install-only: true- name: Update environment variables  run: squarecloud app env set --app "$APP_ID" "DISCORD_TOKEN=$DISCORD_TOKEN" "DATABASE_URL=$DATABASE_URL"  env:    APP_ID: ${{ vars.SQUARECLOUD_APP_ID }}    DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }}    DATABASE_URL: ${{ secrets.DATABASE_URL }}- run: squarecloud commit ${{ vars.SQUARECLOUD_APP_ID }} --restart

五个输入

只有 token 是必填的。其他输入都有默认值,可以保持不变。

token必填
你的 Square Cloud API 密钥。请保存在机密中,不要写进工作流文件。
command
要运行的 CLI 命令,不带 squarecloud 前缀,例如 commit --restart。省略时,Action 只安装 CLI。
version默认 latest
要安装的 CLI 版本:latest,或 3.1.0 及以上版本。查找最新版本时不调用 GitHub API,因此永远不会受其速率限制影响。
workdir默认 .
运行命令的文件夹,相对于仓库根目录。
install-only默认 false
只安装 CLI 并设置密钥,让作业中后续的步骤可以自己运行 squarecloud。
  • 固定 CLI 版本

    无论最新发行版是哪个,每次都用 CLI 3.1.1 部署 bot 文件夹。

    jobs.deploy.steps
    - uses: squarecloudofc/github-action@v2  with:    token: ${{ secrets.SQUARECLOUD_API_KEY }}    version: 3.1.1    workdir: bot    command: commit ${{ vars.SQUARECLOUD_APP_ID }} --restart
  • 运行多个命令

    使用 install-only 后,CLI 及其密钥可供后续步骤使用:构建、部署,然后以 JSON 读取状态。

    jobs.deploy.steps
    - uses: squarecloudofc/github-action@v2  with:    token: ${{ secrets.SQUARECLOUD_API_KEY }}    install-only: true- run: npm ci && npm run build- run: squarecloud commit ${{ vars.SQUARECLOUD_APP_ID }} --restart- run: squarecloud app status ${{ vars.SQUARECLOUD_APP_ID }} --json

任意 GitHub 运行器

该 Action 已在 GitHub 的 Linux、Windows 和 macOS 运行器上测试,涵盖 x64 与 arm64。你的自建运行器同样可用,只要其运行器版本支持 node24 的 Action。

  • Linux

    GitHub 提供的运行器支持 x64 和 arm64。你的自建运行器还可以是 x86 或 ARMv7。

    • 已在 ubuntu-latest 和 ubuntu-24.04-arm 上测试
  • Windows

    GitHub 提供的运行器支持 x64 和 arm64。你的自建运行器还可以是 x86。

    • 已在 windows-latest 和 windows-11-arm 上测试
  • macOS

    支持 Intel 和 Apple 芯片,GitHub 提供的运行器和你自己的运行器均可。

    • 已在 macos-latest 上测试

你的密钥始终保密

Action 像对待密码一样对待 API 密钥。

  • 在日志中屏蔽

    在任何内容运行之前,密钥就已注册为机密,因此在每一行日志中都显示为 ***。

  • 绝不写入磁盘

    CLI 从 SQUARECLOUD_API_KEY 读取密钥。它不会保存在运行器上,也不会通过命令行传递。

  • 仅限一个作业

    同一作业的后续步骤可以使用它,其他作业不能。请在单独的作业中运行你不信任的 Action。

  • 每个仓库一个密钥

    为每个仓库使用单独的密钥,这样撤销其中一个时不会影响其他仓库。

为工作流打造的 CLI

Action 运行的每条命令都是 Square Cloud CLI 命令,而 CLI 本就设计为无需终端即可工作。

  • 用 -y 确认

    会修改或删除数据的命令会先请求确认。工作流无法回答,所以请加上 -y:否则命令会以退出码 1 结束,且不做任何更改。

  • 适合脚本的 JSON

    输出数据的命令支持 --json,让下一个步骤可以解析输出。

  • 追踪每个请求

    在步骤的 env 中设置 SQUARECLOUD_DEBUG: 1,即可记录每个 API 请求的方法、路径、状态和耗时,绝不记录请求头或请求体。

  • 选择要发送的内容

    commit 会排除 squarecloud.ignore 中以 gitignore 语法列出的内容。node_modules、.git 和锁文件默认排除,除非你用 ! 重新加入。

已经在用 @v2?

@v2 现在指向新版本,所以你的工作流无需修改即可继续工作。以下是变化内容。

  • workdir 现已生效。在 2.1.2 及之前的版本中它会被忽略,命令在仓库根目录运行。
  • 密钥不再通过命令行传递,也不再保存在运行器上。
  • 支持 Windows、macOS 和 arm64 运行器。
  • CLI 下载会用校验和进行校验,新的 version 输入可以固定版本。
  • 查找最新 CLI 不再调用 GitHub API,因此不受 API 速率限制影响。
  • Action 运行在 Node 24 上。

CLI 3.1 还会在上传时排除锁文件。如果要继续发送你的锁文件,请将 !package-lock.json(或你的锁文件)添加到 squarecloud.ignore。

项目每个阶段都有合适的套餐

从小规模开始,按需扩展,无绑定合约。

4.9 分(满分 5 分)· Google + Trustpilot 上的 402 条评价Trustpilot

托管于持有以下认证的合作数据中心
Tier 3ISO 27001SOC 2 Type IIAlways-On DDoS 防护
了解我们的基础设施

准备好让你的项目 扩展 了吗?

加入超过 50 万名曾使用 Square Cloud 托管项目的开发者。

  • 可预期的价格
  • 账单无惊喜
  • 秒级部署
  • 高可用性
  • 稳定扩展
  • 自动重启
  • 含 SSL 与安全防护
  • 隔离容器