
本文介绍如何在 AWS spot实例上设置 GitHub Actions 自托管运行器。但在此之前,我们先来聊聊什么是自托管 GitHub 运行器,为什么我们应该用它。
什么是 GitHub Actions 运行器?
GitHub Actions 运行器是一种在机器上运行 GitHub Actions 工作流中作业的应用程序。
您可以使用在 GitHub 服务器上运行的现成 GitHub 托管运行器(Windows、Ubuntu 或 MacOSX,每个都有特定硬件),也可以使用您自己环境中的自托管运行器。
GitHub 运行器可用于:
- 编译
- 运行测试
- 静态代码分析 (SCA)
- 构建容器图片
等等!
我们之前在这篇文章中讨论过如何在 C++ 项目中使用 GitHub 操作,并且还在这篇文章中讨论过如何将其与 Incredibuild 结合使用。今天,我们将重点介绍如何使用 GitHub 操作来触发 AWS spot实例上的操作。
为什么使用自托管运行器?
如果您想要快速轻松地运行工作流,那么 GitHub 托管运行器会是一个非常好的选择。但是,在某些情况下,自托管是您的最佳选择(与 GitHub 托管运行器相反):
- 您正在使用一个私有仓库,并且不希望在运行作业的每一分钟都要花钱。
- 您正在运行一个复杂作业,并且所用机器的硬件需要优于 GitHub 托管运行器的机器硬件。
您可以在 GitHub 文件中找到关于自托管运行器的更多信息。
什么是 AWS spot实例?
AWS 提供了各种可在云上部署的实例类型,例如按需实例、预留实例和spot实例。
这三种实例类型在运行时都具有相同的功能,而定价是唯一的区别。按需实例是没有长期承诺的实例,您必须支付一定的每秒费率。预留实例是在特定时间段内以低于按需实例的每秒费率租用的实例。
与前两个实例不同,spot实例使用备用 AWS 容量,并且价格是这些实例类型中最低的(比按需价格低 90%)。 然而,这里有一个问题。由于您正在使用未使用的资源,您的实例可能会被中断(带有 2 分钟通知)。
尽量避免将spot实例用于包含敏感信息的有状态应用程序、数据库或工作负载。
对于应用测试、持续集成、数据分析、图像渲染等运行时间短且可中断的无状态应用,spot实例是理想的选择。
那我们该怎么办?
在此例中,工作流将使用 Flake8 和 Pylint 验证仓库中 Python 文件的语法(当然,任何其他工作流也可以)。
您需要设置一个 AWS spot 实例来运行 GitHub Actions 自托管运行器,并将其配置为在 AWS 将其中断时重新部署,从而以最低成本提高持续集成 (CI) 作业的灵活性。
该自托管运行器将执行工作流作业。
用于部署spot实例的所有文件都能在此 GitHub 仓库的 aws-files 目录下找到。在此仓库中,还能找到 GitHub Actions 工作流示例。
预排先决条件:
- AWS 帐户
- 配置好的 AWS CLI
- GitHub 仓库
- GitHub 个人访问令牌 (PAT)
创建和配置spot实例
创建并正确配置spot实例时,只需要使用 3 个文件。
1.user-data.sh:一个 Bash 脚本文件,包含将在启动时在实例上运行的命令。在我们的例子中,脚本将在已部署的每个实例上运行,甚至是在用于替换中断的spot机器的新实例上运行。该文件中包含一个脚本,用于安装和配置自托管运行器并启动其服务。(有关 user-data.sh 文件的更多信息,请参阅 AWS 文件)。
#!/bin/bash
github-user="Your GitHub Username"
github-repo="Your GitHub Repository name"
PAT="Your Super Secret PAT"
# Download jq for extracting the Token
yum install jq -y
# Create and move to the working directory
mkdir /actions-runner && cd /actions-runner
# Download the latest runner package
curl -o actions-runner

本文介绍了如何在AWS Spot实例上配置GitHub Actions自托管运行器,以便以低成本运行CI作业。自托管运行器适用于私有仓库和需要高级硬件的情况。通过使用Spot实例和自动缩放组,即使实例被中断,也能确保运行器的持续运行。配置包括创建启动模板、自动缩放组,并在实例上安装和配置运行器。
最低0.47元/天 解锁文章
1215

被折叠的 条评论
为什么被折叠?



