配置自托管运行器以供企业使用
在上一个单元中,你概括性地探索了如何选择和管理 GitHub 托管的运行器和自托管运行器。 在本单元中,你将了解如何针对企业级使用来配置、组织、监视和保护自托管运行器。 这包括:
- 使用代理和自定义标签设置运行器
- 管理运行器组
- 监视运行器的运行状况和性能
- 使用标签和 IP 允许列表配置安全访问
配置自托管运行器以供企业使用
GitHub Actions 中的自承载运行程序为需要 自定义环境、网络访问和安全强化的企业提供更大的灵活性和控制。 本指南介绍配置自托管运行程序的最佳做法,包括代理、标签和网络注意事项。
1.设置自托管运行器
步骤 1:创建和注册自托管运行器
- 导航到 GitHub Enterprise → 设置 → 操作 → 运行器。
- 单击 “新建运行程序 ”并选择所需的 OS(Linux、Windows 或 macOS)。
- 按照提供的命令在计算机上安装和配置运行程序。
步骤 2:安装并启动运行程序
根据 OS 运行以下命令:
Linux/macOS
./config.sh --url https://github.com/<org-name> --token <generated-token>
./run.sh
Windows (PowerShell)
.\config.cmd --url https://github.com/<org-name> --token <generated-token>
.\run.cmd
2.为自托管运行器配置代理
企业通常会在限制 Internet 访问的企业防火墙和代理后面运行。 为了使自托管运行器能够与 GitHub 通信,请配置代理设置,如下所示:
Linux/macOS:配置代理
编辑环境文件以定义代理设置:
export http_proxy=http://proxy.company.com:8080
export https_proxy=http://proxy.company.com:8080
export no_proxy=localhost,127.0.0.1
应用设置:
source ~/.bashrc
Windows:配置代理
使用以下 PowerShell 命令:
[System.Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.company.com:8080", "Machine")
[System.Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.company.com:8080", "Machine")
3. 使用标签进行运行器管理
标签有助于根据操作系统、硬件或项目要求组织作业,并将其分配到特定的自托管运行器。
将标签分配给运行器
配置运行器时,可以分配自定义标签:
./config.sh --url https://github.com/<org-name> --token <generated-token> --labels "high-memory,gpu"
在工作流中面向特定运行器
若要通过标签在特定运行器上运行作业,请更新工作流文件.yml:
jobs:
build:
runs-on: [self-hosted, high-memory]
steps:
- name: Checkout repository
uses: actions/checkout@v3
4.网络注意事项
将 GitHub IP 加入允许列表
GitHub 托管的运行程序在动态 IP 上运行,但自承载运行程序需要防火墙规则才能允许访问。 检索最新的 GitHub IP 范围:
curl -s https://api.github.com/meta | jq .actions
允许防火墙设置中的这些 IP 确保连接。
专用网络和 VPN 访问
对于需要访问专用系统的企业工作负荷,请将运行程序配置为通过 VPN 或内部网络进行连接。
5.企业运行器的安全最佳做法
将运行程序限制为受信任的工作流:防止不受信任的代码在自承载运行程序上执行。
使用临时运行器:在作业后自动删除运行器,以防止持续威胁。
监控执行器活动:记录所有执行器操作并审核访问权限。
应用操作系统安全补丁:定期更新和保护运行器机器。
使用组管理自托管运行器
运行器组允许组织在 GitHub Actions 中对自托管运行器进行管理访问、控制工作负载分配,并实施安全策略。 本指南介绍如何有效地创建、管理运行器并在组之间移动运行器。
1.了解运行器组
运行器组可帮助在 GitHub Enterprise 或组织中组织和控制自托管运行器。 它们允许:
- 限制哪些存储库可以使用特定的运行器。
- 控制运行器对不同团队或工作负载的可用性。
- 管理 特定分支、工作流或环境的权限。
运行器组可用性
GitHub 计划 | 运行器组是否可用? |
---|---|
GitHub 免费版 | ❌ 不可用 |
GitHub Pro | ❌ 不可用 |
GitHub 团队 | ✅ 可用 |
GitHub Enterprise | ✅ 可用 |
2.创建运行器组
- 转到 GitHub → 组织设置 → 操作 → 运行器。
- 单击“新建组”下的“Self-Hosted Runners”。
- 为组提供 名称 (例如“Linux-Runners”、“High-Memory”)。
- 选择 谁可以访问组 (整个组织或特定存储库)。
- 单击“ 保存”。
3.将运行器添加到组
创建组后,可以在注册期间或手动添加跑步者。
选项 1:在注册期间分配
配置新的运行器时,请指定组:
./config.sh --url https://github.com/<org-name> --token <generated-token> --runnergroup "Linux-Runners"
选项 2:移动现有运行器
- 导航到 GitHub → 组织设置 → 操作 → 运行器。
- 找到 运行程序 ,然后单击“ 编辑”。
- 选择 新的运行器组 并保存更改。
4. 管理访问和权限
限制运行器组的访问权限
组织级运行程序: 将使用情况限制为特定存储库。 存储库级运行程序: 只有选定的工作流才能访问运行程序。
示例:限制对特定存储库的访问
- 导航到 运行程序组设置。
- 在 “存储库访问”下,选择 “仅选择存储库”。
- 添加被允许使用运行器组的存储库。
5.在组之间移动运行器
若要将一个组中的运行器重新分配到另一个组,请执行以下操作:
- 转到“GitHub”→“组织设置”→“操作”→“运行器”。
- 单击“运行器名称”。
- 选择“更改组”,选择一个新组。
- 单击“保存”。或者,取消注册运行器,再在另一个组中重新注册:
./config.sh remove
./config.sh --url https://github.com/<org-name> --token <generated-token> --runnergroup "New-Group"
- 为不同的 OS 类型(例如 Windows、Linux、macOS)创建单独的组。
- 使用标签进一步分类运行程序(例如 GPU、高内存、ARM)。
- 仅限运行器访问受信任的存储库。
- 根据团队要求定期审核和更新运行器组。
- 监视运行器使用情况和性能以优化 CI/CD 负载。
监视、更新自托管运行器并对其进行故障排除**
要有效地管理自托管运行器,需要持续监视、主动进行故障排除和定期更新。 本指南介绍了确保自承载运行程序 高可用性、安全性和性能 的最佳做法和 GitHub 推荐的方法。
1.监视自托管运行器
检查运行器状态
若要监视运行器的可用性,请执行以下操作:
- 导航到“GitHub”→“组织设置”→“操作”→“运行器”。
- 查看状态:
- ✅空闲 → 为工作流做好准备。
- 🔄活动 → 当前正在运行作业。
- ❌脱机→ 跑步器已关闭或断开连接。
使用 GitHub API 获取运行器状态
可以编程方式检查自托管运行器的状态:
curl -H "Authorization: token <your_github_token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/orgs/<org-name>/actions/runners
响应示例:
{
"total_count": 2,
"runners": [
{
"id": 1,
"name": "runner-1",
"status": "online"
},
{
"id": 2,
"name": "runner-2",
"status": "offline"
}
]
}
日志记录和指标
- 系统日志: 检查运行程序安装文件夹中的
_diag/
目录中的日志。 - GitHub Actions 工作流日志: 导航到“作”→工作流运行→日志以查看运行程序执行详细信息。
- 通过 Prometheus/Grafana 进行监视: 配置 Prometheus 导出程序以跟踪 CPU、内存和作业执行时间。
2.对自托管运行器进行故障排除
常见问题及解决方案
問题 | 可能的原因 | 修复 |
---|---|---|
运行器显示脱机 | 网络问题、令牌过期或运行器崩溃 | 重启运行器: ./run.sh |
作业停滞在“已排队”状态 | 没有带所需标签的运行器可用 | 添加运行器或更新标签 |
作业因权限错误而失败 | 运行器权限不正确 | 确保运行器具有正确的访问权限 |
工作流执行速度缓慢 | CPU/内存使用率高 | 监视系统指标和缩放运行器 |
重启运行器
如果运行器停滞或无响应,请将其重启:
./svc.sh stop
./svc.sh start
对于基于 systemd 的 Linux 运行器:
sudo systemctl restart actions.runner.<org-name>.<runner-name>.service
检查日志中是否存在错误
运行程序日志:<runner_dir>/_diag/Runner_<timestamp>.log
GitHub Actions 日志: 在 GitHub UI 中检查工作流执行日志。
3.更新自托管运行器
检查运行器更新
GitHub 定期更新运行程序二进制文件。 要检查更新,请:
./config.sh --version
还可以通过 API 检查运行器版本。
curl -H "Authorization: token <your_github_token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/actions/runner/releases/latest
更新运行器
1.手动更新 停止运行程序
./svc.sh stop
2.下载最新的运行程序:
curl -o actions-runner-linux-x64.tar.gz -L \
https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
3.提取和重新配置:
tar xzf ./actions-runner-linux-x64.tar.gz
./config.sh --url https://github.com/<org-name> --token <generated-token>
./svc.sh install
./svc.sh start
使用 GitHub Actions 进行自动更新
若要自动检查和更新运行器,请执行以下操作:
name: Update Runners
on:
schedule:
- cron: '0 3 * * 1' # Runs every Monday at 3 AM
jobs:
update-runners:
runs-on: self-hosted
steps:
- name: Download and update runner
run: |
./svc.sh stop
curl -o actions-runner.tar.gz -L \
https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
tar xzf actions-runner.tar.gz
./config.sh --url https://github.com/<org-name> --token <generated-token>
./svc.sh start