配置自托管运行器以供企业使用

已完成

在上一个单元中,你概括性地探索了如何选择和管理 GitHub 托管的运行器和自托管运行器。 在本单元中,你将了解如何针对企业级使用来配置、组织、监视和保护自托管运行器。 这包括:

  • 使用代理和自定义标签设置运行器
  • 管理运行器组
  • 监视运行器的运行状况和性能
  • 使用标签和 IP 允许列表配置安全访问

配置自托管运行器以供企业使用

GitHub Actions 中的自承载运行程序为需要 自定义环境、网络访问和安全强化的企业提供更大的灵活性和控制。 本指南介绍配置自托管运行程序的最佳做法,包括代理、标签和网络注意事项。

1.设置自托管运行器

步骤 1:创建和注册自托管运行器

  1. 导航到 GitHub Enterprise → 设置 → 操作 → 运行器
  2. 单击 “新建运行程序 ”并选择所需的 OS(Linux、Windows 或 macOS)。
  3. 按照提供的命令在计算机上安装和配置运行程序。

步骤 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.创建运行器组

  1. 转到 GitHub → 组织设置 → 操作 → 运行器
  2. 单击“新建组”下的“Self-Hosted Runners”
  3. 为组提供 名称 (例如“Linux-Runners”、“High-Memory”)。
  4. 选择 谁可以访问组 (整个组织或特定存储库)。
  5. 单击“ 保存”。

“创建运行器组”窗体屏幕的屏幕截图。

3.将运行器添加到组

创建组后,可以在注册期间或手动添加跑步者。

选项 1:在注册期间分配

配置新的运行器时,请指定组:

./config.sh --url https://github.com/<org-name> --token <generated-token> --runnergroup "Linux-Runners"

选项 2:移动现有运行器

  1. 导航到 GitHub → 组织设置 → 操作 → 运行器。
  2. 找到 运行程序 ,然后单击“ 编辑”。
  3. 选择 新的运行器组 并保存更改。

4. 管理访问和权限

限制运行器组的访问权限

组织级运行程序: 将使用情况限制为特定存储库。 存储库级运行程序: 只有选定的工作流才能访问运行程序。

示例:限制对特定存储库的访问

  1. 导航到 运行程序组设置。
  2. “存储库访问”下,选择 “仅选择存储库”。
  3. 添加被允许使用运行器组的存储库。

5.在组之间移动运行器

若要将一个组中的运行器重新分配到另一个组,请执行以下操作:

  1. 转到“GitHub”→“组织设置”→“操作”→“运行器”。
  2. 单击“运行器名称”。
  3. 选择“更改组”选择一个新组。
  4. 单击“保存”。或者,取消注册运行器,再在另一个组中重新注册:
./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.监视自托管运行器

检查运行器状态

若要监视运行器的可用性,请执行以下操作:

  1. 导航到“GitHub”→“组织设置”→“操作”→“运行器”。
  2. 查看状态:
    • 空闲 → 为工作流做好准备。
    • 🔄活动 → 当前正在运行作业。
    • 脱机→ 跑步器已关闭或断开连接。

使用 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>.logGitHub 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