Ruby: 使用 GitHub Actions 部署
如何使用 GitHub Actions 部署您的 Ruby 代码
👋 欢迎来到 Stackhero 文档!
Stackhero 提供了一种即用型 Ruby 云 解决方案,具有众多优势,包括:
- 通过简单的
git push在几秒钟内 部署您的应用程序。- 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
- 享受自动备份、一键更新以及简单、透明和可预测的定价带来的安心。
- 通过私有和专用的 VM获得最佳的性能和强大的安全性。
节省时间并简化您的生活:尝试 Stackhero 的 Ruby 云托管 解决方案只需 5 分钟!
GitHub Actions 让自动化任务变得简单,例如将您的 Ruby 代码部署到生产服务器,无需任何手动操作。
在本指南中,您将了解如何安全可靠地配置 GitHub Actions,实现 Ruby 代码自动部署到预发布(staging)和生产(production)环境。这种方式可以确保部署过程一致,并降低出错风险。
首先,您需要在 GitHub 仓库中使用两个分支:staging 和 production。每当您向这些分支推送代码时,您的更改将自动部署到对应的 Stackhero 实例。
拥有 staging 实例并非强制要求。您可以仅使用生产实例完成本指南,但强烈建议同时设置 staging 和 production 环境。这是业界公认的最佳实践,有助于在问题影响到生产用户之前及时发现。
在开始之前,请确保您拥有一个 GitHub 账号,并且已经有包含 Ruby 代码的仓库。
创建 Ruby 服务
请前往 Stackhero 控制台,创建两个 Ruby 服务:一个用于 staging,另一个用于 production。为方便区分,建议将这两个服务分别重命名为“Production”和“Staging”。
还没有 Stackhero 账号? 您可以在几分钟内免费注册,然后只需几次点击即可创建您的 Ruby 云服务。
生产和预发布服务示例
配置 SSH 密钥
为了让 GitHub Actions 能够部署您的代码,您需要配置 SSH 密钥。这可以确保只有经过授权的操作才能连接到您的 Stackhero 服务,从而保障部署安全。
您可以在本地电脑上生成一对新的 SSH 密钥:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
设置公钥
接下来,获取刚刚生成的公钥内容:
cat /tmp/ssh_key.pub
在 Stackhero 控制台中,选择您的“production” Ruby 服务,点击“Configure”按钮。
获取服务设置
然后:
- 在
SSH public keys下,点击Add a public key。 - 在
Description中输入GitHub Action。 - 在
Key中粘贴您电脑上的公钥内容。
获取服务设置
设置私钥
现在,前往 GitHub 网站并打开您的项目。
进入 Settings > Environments,然后点击 New environment。
配置 GitHub 环境
将环境命名为“production”,并保存。
设置环境
点击 No restriction 按钮,选择 Selected branches and tags。
设置环境限制
点击 Add deployment branch or tag rule,输入“production”作为模式,并添加该规则。
设置环境分支
设置环境分支
为了安全存储您的 SSH 私钥,请进入 Environment secrets,点击 Add secret。
添加密钥
从您的电脑获取私钥内容:
cat /tmp/ssh_key
在 Name 中输入 STACKHERO_SSH_PRIVATE_KEY,在 Value 中粘贴您的私钥内容。
设置 SSH 私钥密钥
接下来,将 Ruby 服务的 endpoint 作为环境变量添加。点击 Environment variables 下的 Add variable。
设置变量
在 Name 中输入 STACKHERO_ENDPOINT,在 Value 中粘贴您在 Stackhero 控制台找到的 Ruby 服务 endpoint。
设置 endpoint 变量
如果您为服务设置了自定义域名,请务必使用该自定义域名,而不是 <XXXXXX>.stackhero-network.com。
删除生成的密钥
当您在 Stackhero 和 GitHub 上完成密钥配置后,为了安全起见,可以将它们从本地电脑删除。
rm /tmp/ssh_key /tmp/ssh_key.pub
配置 GitHub Actions 工作流
在本地机器的 Git 仓库中,创建一个名为 .github/workflows 的目录。在该目录下新建一个名为 deploy-to-stackhero.yml 的文件。
# 文件:.github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero
on:
push:
# 下面的分支列表会在 git push 时触发部署操作。
# 请确保在 GitHub 的 "Settings"/"Environments" 中为每个分支创建对应的环境。
# 然后在该环境下添加相应的密钥 "STACKHERO_SSH_PRIVATE_KEY" 和变量 "STACKHERO_ENDPOINT"。
branches: [ "production", "staging" ]
jobs:
Deploy:
environment: ${{ github.ref_name }}
runs-on: ubuntu-latest
steps:
- uses: stackhero-io/github-actions-deploy-to-stackhero@v1
with:
# 密钥 "STACKHERO_SSH_PRIVATE_KEY" 和变量 "STACKHERO_ENDPOINT" 需要在 GitHub 的 "Settings"/"Environments" 下对应分支的环境中定义。
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
创建好工作流文件后,您可以提交更改。
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
接下来,创建 production 分支。
git checkout -b production
最后,将更改推送到 GitHub。
git push --set-upstream origin production
最后一次 git push 会将您的代码上传到 GitHub 的 production 分支。GitHub Actions 会自动启动并将您的代码部署到 Stackhero 实例。
要查看工作流执行情况,请访问项目的 GitHub 页面并点击 Actions。
GitHub Actions 部署到生产环境
恭喜,您已成功通过 GitHub Actions 实现了生产环境的持续部署。
创建预发布(staging)环境
staging 环境的配置流程与 production 完全一致。只需重复上述步骤,将所有涉及 production 的地方替换为 staging 即可。
配置好 staging 环境后,您可以创建 staging 分支。
git checkout -b staging
将 staging 分支推送到 GitHub。
git push --set-upstream origin staging
现在,GitHub Actions 会自动将 staging 分支部署到您指定的 Stackhero Ruby 实例。
深入实践
为了进一步保障部署安全,建议保护您的 production 和 staging 分支。这样可以限制直接 push,所有更改都需通过 Pull Request。拥有相应权限的团队成员可以审核并批准对 staging 的 Pull Request,确认无误后,再以同样方式合并到 production。
采用这种工作流,您可以提升安全性(只有授权用户才能部署到 staging 和 production),并增强可靠性(所有新功能都会先在 staging 测试,再上线 production)。这有助于确保部署流程顺畅,生产环境始终保持稳定。