1. GitHub Actions简介与版本说明
GitHub Actions是GitHub提供的持续集成和持续交付(CI/CD)平台,通过Self-hosted Runner可以在自己的服务器上运行构建任务。更多学习教程www.fgedu.net.cn
GitHub Runner最新版本:
GitHub Runner 2.323.0(2026年3月发布)
GitHub Runner 2.322.1(2026年2月发布)
GitHub Runner 2.321.1(2026年1月发布)
GitHub Runner 2.320.0(2025年12月发布)
GitHub Runner类型:
GitHub-hosted runners:GitHub托管的Runner,按分钟计费
Self-hosted runners:自托管Runner,在自己的服务器上运行
Larger runners:大型Runner,提供更多CPU和内存资源
2. GitHub Runner下载地址
GitHub Runner支持多种操作系统和架构,可以从官方发布页面获取对应版本。学习交流加群风哥微信: itpux-com
官方下载地址:
GitHub Runner发布页面:https://github.com/actions/runner/releases
GitHub Runner源码仓库:https://github.com/actions/runner
GitHub Actions文档:https://docs.github.com/en/actions
$ curl -s “https://api.github.com/repos/actions/runner/releases/latest” | grep -E ‘”tag_name”|”name”|”browser_download_url”‘
输出示例如下:
“tag_name”: “v2.323.0”,
“name”: “v2.323.0”,
“browser_download_url”: “https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-x64-2.323.0.tar.gz”,
“browser_download_url”: “https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-arm64-2.323.0.tar.gz”,
“browser_download_url”: “https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-osx-x64-2.323.0.tar.gz”,
“browser_download_url”: “https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-win-x64-2.323.0.zip”
各平台下载链接:
Linux x64:https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-x64-2.323.0.tar.gz
Linux ARM64:https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-arm64-2.323.0.tar.gz
macOS x64:https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-osx-x64-2.323.0.tar.gz
Windows x64:https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-win-x64-2.323.0.zip
3. Linux系统安装GitHub Runner
在Linux系统上安装GitHub Runner需要下载压缩包并解压配置。风哥提示:生产环境建议创建专用用户运行Runner服务。
步骤1:创建Runner用户
# useradd -m -s /bin/bash github-runner
# 设置密码
# passwd github-runner
输出示例如下:
Changing password for user github-runner.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 添加到docker组(如需使用Docker)
# usermod -aG docker github-runner
步骤2:下载并安装Runner
# su – github-runner
# 创建Runner目录
$ mkdir -p ~/actions-runner && cd ~/actions-runner
# 下载最新版本Runner
$ curl -o actions-runner-linux-x64-2.323.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.323.0/actions-runner-linux-x64-2.323.0.tar.gz
输出示例如下:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 78.58M 100 78.58M 0 0 15.2M 0 0:00:05 0:00:05 –:–:– 18.5M
# 验证下载文件
$ echo “abc123def456 actions-runner-linux-x64-2.323.0.tar.gz” | shasum -a 256 -c
输出示例如下:
actions-runner-linux-x64-2.323.0.tar.gz: OK
# 解压文件
$ tar xzf ./actions-runner-linux-x64-2.323.0.tar.gz
输出示例如下:
./
./externals/
./externals/gh_token/
./externals/gh_token/LICENSE
./externals/gh_token/gh_token
…
# 查看解压内容
$ ls -la
输出示例如下:
total 80520
drwxr-xr-x 4 github-runner github-runner 4096 Apr 4 10:00 .
drwxrwxr-x 3 github-runner github-runner 4096 Apr 4 10:00 ..
-rw-r–r– 1 github-runner github-runner 80439296 Apr 4 10:00 actions-runner-linux-x64-2.323.0.tar.gz
drwxr-xr-x 2 github-runner github-runner 4096 Apr 4 10:00 bin
drwxr-xr-x 19 github-runner github-runner 4096 Apr 4 10:00 externals
-rwxr-xr-x 1 github-runner github-runner 3277 Apr 4 10:00 config.sh
-rwxr-xr-x 1 github-runner github-runner 3277 Apr 4 10:00 run.sh
步骤3:安装依赖
# ./bin/installdependencies.sh
输出示例如下:
Libicu dependencies:
Last metadata expiration check: 0:00:15 ago on Sat Apr 4 10:00:00 2026.
Package libicu-60.3-2.el8_1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
…
Additional dependencies:
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
lttng-ust x86_64 2.8.1-11.el8 ol8_baseos 258 k
krb5-libs x86_64 1.18.2-28.el8 ol8_baseos 823 k
zlib x86_64 1.2.11-25.el8 ol8_baseos 102 k
Transaction Summary
================================================================================
Install 3 Packages
Total download size: 1.2 M
Installed size: 3.5 M
Downloading Packages:
(1/3): lttng-ust-2.8.1-11.el8.x86_64.rpm 1.2 MB/s | 258 kB 00:00
(2/3): krb5-libs-1.18.2-28.el8.x86_64.rpm 2.5 MB/s | 823 kB 00:00
(3/3): zlib-1.2.11-25.el8.x86_64.rpm 500 kB/s | 102 kB 00:00
——————————————————————————–
Total 1.5 MB/s | 1.2 MB 00:00
Complete!
4. Docker方式部署GitHub Runner
使用Docker部署GitHub Runner是生产环境常用的方式,便于管理和升级。学习交流加群风哥QQ113257174
步骤1:拉取GitHub Runner镜像
# docker pull ghcr.io/actions/actions-runner:latest
输出示例如下:
latest: Pulling from actions/actions-runner
Digest: sha256:abc123def456…
Status: Downloaded newer image for ghcr.io/actions/actions-runner:latest
ghcr.io/actions/actions-runner:latest
# 拉取指定版本镜像
# docker pull ghcr.io/actions/actions-runner:2.323.0
输出示例如下:
2.323.0: Pulling from actions/actions-runner
7a9868e23051: Pull complete
…
Digest: sha256:abc123def456…
Status: Downloaded newer image for ghcr.io/actions/actions-runner:2.323.0
ghcr.io/actions/actions-runner:2.323.0
# 查看本地镜像
# docker images | grep actions-runner
输出示例如下:
ghcr.io/actions/actions-runner latest abc123def456 2 days ago 700MB
ghcr.io/actions/actions-runner 2.323.0 abc123def456 2 days ago 700MB
步骤2:创建GitHub Runner容器
# mkdir -p /fgedudb/github-runner
# 启动Runner容器(需要先获取Token)
# docker run -d –name github-runner \
-e GITHUB_URL=”https://github.com” \
-e GITHUB_TOKEN=”YOUR_RUNNER_TOKEN” \
-e RUNNER_NAME=”fgedu-runner-01″ \
-e RUNNER_WORKDIR=”/tmp/github-runner” \
-e RUNNER_GROUP=”default” \
-e RUNNER_LABELS=”docker,build,deploy” \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /fgedudb/github-runner:/tmp/github-runner \
ghcr.io/actions/actions-runner:latest
输出示例如下:
Unable to find image ‘ghcr.io/actions/actions-runner:latest’ locally
latest: Pulling from actions/actions-runner
…
Digest: sha256:abc123def456…
Status: Downloaded newer image for ghcr.io/actions/actions-runner:latest
f8e7d8a9c0b1a2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7
# 查看容器状态
# docker ps | grep github-runner
输出示例如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8e7d8a9c0b1 ghcr.io/actions/actions-runner:latest “/bin/bash -c ‘./run…” 10 seconds ago Up 9 seconds github-runner
步骤3:使用Docker Compose部署
# cat > /fgedudb/github-runner/docker-compose.yml << 'EOF' version: '3.8' services: github-runner: image: ghcr.io/actions/actions-runner:2.323.0 container_name: github-runner restart: always environment: - GITHUB_URL=https://github.com - GITHUB_TOKEN=${GITHUB_TOKEN} - RUNNER_NAME=fgedu-runner-01 - RUNNER_WORKDIR=/tmp/github-runner - RUNNER_GROUP=default - RUNNER_LABELS=docker,build,deploy - TZ=Asia/Shanghai volumes: - /var/run/docker.sock:/var/run/docker.sock - ./work:/tmp/github-runner logging: driver: "json-file" options: max-size: "100m" max-file: "3" EOF # 创建环境变量文件 # cat > /fgedudb/github-runner/.env << 'EOF' GITHUB_TOKEN=YOUR_RUNNER_TOKEN EOF # 启动服务 # cd /fgedudb/github-runner # docker-compose up -d 输出示例如下: Creating network "github-runner_default" with the default driver Creating github-runner ... done # 查看服务状态 # docker-compose ps 输出示例如下: Name Command State Ports ------------------------------------------------------------ github-runner "/bin/bash -c './run.sh'" Up
5. GitHub Runner注册配置
GitHub Runner需要注册到GitHub仓库或组织才能接收构建任务。更多学习教程公众号风哥教程itpux_com
步骤1:获取注册Token
# Settings -> Actions -> Runners -> New self-hosted runner
# 仓库级别Token示例
# https://github.com/OWNER/REPO/settings/actions/runners/new
# 组织级别Token
# https://github.com/organizations/ORG/settings/actions/runners/new
# Token格式示例
# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# 或使用API获取Token
$ curl -X POST \
-H “Authorization: token YOUR_GITHUB_TOKEN” \
-H “Accept: application/vnd.github+json” \
https://api.github.com/repos/OWNER/REPO/actions/runners/registration-token
输出示例如下:
{
“token”: “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”,
“expires_at”: “2026-03-16T10:00:00Z”
}
步骤2:配置Runner
$ ./config.sh
输出示例如下:
——————————————————————————–
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| | | | | | | ‘_ \ / _ \ / __| __| |/ _ \| ‘_ \/ __| |
| | |_| | | |_| |_| | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\_| \__,_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
——————————————————————————–
# What is the URL of the GitHub repository?
# 输入仓库URL: https://github.com/fgedu/fgedu-app
# What is the runner registration token?
# 输入Token: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# What runner group should this runner belong to?
# 输入Runner组: (留空使用默认组)
# What name should this runner have?
# 输入Runner名称: fgedu-runner-01
# What labels should this runner have?
# 输入标签: docker,build,deploy
# What work folder should this runner use?
# 输入工作目录: _work
√ Runner successfully added
√ Runner connection is good
√ Runner settings are saved
步骤3:非交互式配置
$ ./config.sh –url https://github.com/fgedu/fgedu-app \
–token AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \
–name fgedu-runner-01 \
–labels docker,build,deploy \
–work _work \
–unattended
输出示例如下:
——————————————————————————–
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| | | | | | | ‘_ \ / _ \ / __| __| |/ _ \| ‘_ \/ __| |
| | |_| | | |_| |_| | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\_| \__,_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
——————————————————————————–
√ Connected to GitHub
Runner successfully added to repository fgedu/fgedu-app
Runner settings:
Name: ‘fgedu-runner-01’
Runner Group: ‘Default’
Labels: ‘docker,build,deploy’
Work Folder: ‘_work’
步骤4:安装为系统服务
# ./svc.sh install
输出示例如下:
Creating launch runner in /etc/systemd/system/github-runner.service
Run as user: github-runner
Run as uid: 1001
gid: 1001
Created symlink /etc/systemd/system/multi-user.target.wants/github-runner.service → /etc/systemd/system/github-runner.service.
# 启动服务
# ./svc.sh start
输出示例如下:
Starting service…
Service started successfully.
# 查看服务状态
# ./svc.sh status
输出示例如下:
Service is running
Status: Active
Runner Name: fgedu-runner-01
Runner ID: 12345
Pool ID: 1
# 设置开机自启
# systemctl enable github-runner
输出示例如下:
Created symlink /etc/systemd/system/multi-user.target.wants/github-runner.service → /etc/systemd/system/github-runner.service.
6. GitHub Actions Workflow实战
GitHub Actions使用YAML文件定义Workflow,支持多阶段构建和部署。风哥提示:Workflow文件应放在.github/workflows目录下。
步骤1:创建Workflow文件
$ mkdir -p .github/workflows
# 创建CI Workflow
$ cat > .github/workflows/ci.yml << 'EOF'
name: CI Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
env:
DOCKER_REGISTRY: 192.168.1.51:5000
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn clean package -DskipTests
- name: Run tests
run: mvn test
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: app-jar
path: target/*.jar
docker:
needs: build
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: app-jar
path: target
- name: Login to Registry
run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login $DOCKER_REGISTRY -u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: Build Docker image
run: |
docker build -t $DOCKER_REGISTRY/$IMAGE_NAME:${{ github.sha }} .
docker tag $DOCKER_REGISTRY/$IMAGE_NAME:${{ github.sha }} $DOCKER_REGISTRY/$IMAGE_NAME:latest
- name: Push Docker image
run: |
docker push $DOCKER_REGISTRY/$IMAGE_NAME:${{ github.sha }}
docker push $DOCKER_REGISTRY/$IMAGE_NAME:latest
deploy:
needs: docker
runs-on: self-hosted
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/fgedu-app fgedu-app=$DOCKER_REGISTRY/$IMAGE_NAME:${{ github.sha }} -n default
EOF
# 提交Workflow文件
$ git add .github/workflows/ci.yml
$ git commit -m "Add GitHub Actions CI Pipeline"
输出示例如下:
[main abc123d] Add GitHub Actions CI Pipeline
1 file changed, 60 insertions(+)
create mode 100644 .github/workflows/ci.yml
$ git push origin main
输出示例如下:
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 1.20 KiB | 1.20 MiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
To https://github.com/fgedu/fgedu-app.git
def456a..abc123d main -> main
步骤2:查看Workflow运行状态
$ gh run list
输出示例如下:
STATUS NAME BRANCH EVENT ID ELAPSED AGE
✓ CI Pipeline main push 1234567890 5m30s 1m
# 查看Workflow详情
$ gh run view 1234567890
输出示例如下:
CI Pipeline · 1234567890
Triggered via push about 2 minutes ago
JOBS
✓ build in 2m15s
✓ docker in 1m30s
✓ deploy in 1m00s
ANNOTATIONS
No annotations
# 查看Job日志
$ gh run view 1234567890 –log
输出示例如下:
2026-04-04T10:00:00.0000000Z ##[group]Run actions/checkout@v4
2026-04-04T10:00:00.0000000Z with:
2026-04-04T10:00:00.0000000Z repository: fgedu/fgedu-app
2026-04-04T10:00:00.0000000Z ref: refs/heads/main
2026-04-04T10:00:00.0000000Z ##[endgroup]
2026-04-04T10:00:01.0000000Z Syncing repository: fgedu/fgedu-app
2026-04-04T10:00:02.0000000Z Working directory is ‘/tmp/github-runner/_work/fgedu-app/fgedu-app’
…
7. GitHub Runner生产环境配置
生产环境需要对GitHub Runner进行优化配置,确保稳定性和性能。from:www.itpux.com
步骤1:配置Runner资源限制
# vi /etc/systemd/system/github-runner.service
[Unit]
Description=GitHub Actions Runner
After=network.target
[Service]
User=github-runner
Group=github-runner
WorkingDirectory=/home/github-runner/actions-runner
ExecStart=/home/github-runner/actions-runner/run.sh
Restart=always
RestartSec=5
LimitNOFILE=65536
MemoryMax=8G
CPUQuota=200%
[Install]
WantedBy=multi-user.target
# 重新加载配置
# systemctl daemon-reload
# systemctl restart github-runner
步骤2:配置Runner监控
# cat > /usr/local/bin/monitor-runner.sh << 'EOF' #!/bin/bash RUNNER_STATUS=$(systemctl is-active github-runner) RUNNER_COUNT=$(ps aux | grep -c "[R]unner.Listener") if [ "$RUNNER_STATUS" != "active" ] || [ "$RUNNER_COUNT" -lt 1 ]; then echo "Runner is not running, attempting restart..." systemctl restart github-runner echo "Runner restarted at $(date)" >> /var/log/runner-monitor.log
fi
EOF
# 添加执行权限
# chmod +x /usr/local/bin/monitor-runner.sh
# 添加定时任务
# crontab -e
输出示例如下:
*/5 * * * * /usr/local/bin/monitor-runner.sh
# 查看Runner状态
# systemctl status github-runner
输出示例如下:
● github-runner.service – GitHub Actions Runner
Loaded: loaded (/etc/systemd/system/github-runner.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2026-04-04 10:00:00 CST; 1h ago
Main PID: 12345 (run.sh)
Tasks: 15 (limit: 49143)
Memory: 512.0M (limit: 8.0G)
CGroup: /system.slice/github-runner.service
├─12345 /bin/bash ./run.sh
└─12346 ./bin/Runner.Listener run –startuptype service
步骤3:配置日志轮转
# cat > /etc/logrotate.d/github-runner << 'EOF' /var/log/github-runner/*.log { daily rotate 30 compress delaycompress missingok notifempty create 0644 github-runner github-runner sharedscripts postrotate systemctl reload github-runner > /dev/null 2>&1 || true
endscript
}
EOF
# 创建日志目录
# mkdir -p /var/log/github-runner
# chown github-runner:github-runner /var/log/github-runner
# 配置Runner输出日志
# vi /etc/systemd/system/github-runner.service
[Service]
StandardOutput=append:/var/log/github-runner/runner.log
StandardError=append:/var/log/github-runner/runner.log
# 重启服务
# systemctl daemon-reload
# systemctl restart github-runner
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
