跳到主要内容

Gitea Actions(1)二进制部署

一、准备 Gitea Actions 服务器

  1. 首先你已经在服务器A上部署了 Gitea
  2. 现在准备一台服务器B,部署Gitea Actions。官方文档建议我们将Gitea和 Gitea Actions分别部署在两台服务器上。

下文简称 Gitea Actions 和 Runner 是一个意思。

参考:https://docs.gitea.com/zh-cn/next/usage/actions/act-runner

二、安装 Docker

使用 Actions 需安装 Docker

# debian/ubuntu
sudo apt update
sudo apt install docker.io

# 当前用户加入 docker 组
sudo usermod -aG docker $USER

# 注销,重新登录,让 docker 组生效

三、安装 Gitea Actions 二进制文件

下载地址:https://dl.gitea.com/act_runner/

1.登录到 Actions 服务器,创建目录并下载 Actions 二进制程序

mkdir ~/bin
cd ~/bin
wget https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-amd64

# 重命名
mv act_runner-0.2.11-linux-amd64 act_runner

# 赋权
chmod +x act_runner

2.注册 Runner

准备 instance 和 token 信息:

  • instance:你的 Gitea 服务器地址
  • token:登录 Gitea 服务器 > 设置 > Actions > Runners > 创建 Runner > 复制 token

register runner

注册 Action Runner 到 Gitea 服务器:

cd ~/bin
./act_runner register --no-interactive --instance <instance> --token <token>

例如:./act_runner register --no-interactive --instance http://192.168.8.8:3000 --token YohvohSh6waena1xae9eujiephisie8eichei3Ung5uyei3w

执行成功后目录下会多出一个 .runner 文件:

$ ls -a
. .. .runner act_runner

$ cat .runner
{
"WARNING": "This file is automatically generated by act-runner. Do not edit it manually unless you know what you are doing. Removing this file will cause act runner to re-register as a new runner.",
"id": 8,
"uuid": "手动打码",
"name": "actions",
"token": "手动打码",
"address": "http://192.168.10.102:3000",
"labels": [
"ubuntu-latest:docker://gitea/runner-images:ubuntu-latest",
"ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04",
"ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04"
]
}

四、启动 Runner

cd ~/bin
./act_runner daemon

Runner 启动成功则提示

$ ./act_runner daemon
INFO[2025-04-23T23:19:03Z] Starting runner daemon
INFO[2025-04-23T23:19:03Z] runner: actions, with version: v0.2.11, with labels: [ubuntu-latest ubuntu-22.04 ubuntu-20.04], declare successfully

登录 Gitea 服务器,可以在 Acitions 中看到刚才启动的 Runner,它处于空闲状态。

image-20250423220721990

五、测试 Runner

  1. 创建一个测试仓库:

    • 在你的 Gitea 网站创建名为 test-runner 的仓库

    • 初始化

    • 克隆到本地

  2. 进入仓库,创建 Action 文件 test-runner/.gitea/workflow/demo.yamal

name: Gitea Actions 演示
run-name: ${{ gitea.actor }} 正在测试 Gitea Actions 🚀
on: [push]

jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 该任务是由 ${{ gitea.event_name }} 事件自动触发的。"
- run: echo "🐧 当前任务正在 Gitea 提供的 ${{ runner.os }} 服务器上运行!"
- run: echo "🔎 当前分支名为 ${{ gitea.ref }},仓库为 ${{ gitea.repository }}。"
- name: 检出仓库代码
uses: https://gitea.com/actions/checkout@v4
- run: echo "💡 仓库 ${{ gitea.repository }} 已被克隆到运行器中。"
- run: echo "🖥️ 工作流现在可以在运行器上测试你的代码了。"
- name: 列出仓库中的文件
run: |
ls ${{ gitea.workspace }}
- run: echo "🍏 当前任务的状态是 ${{ job.status }}。"
- run: echo "当前node和npm版本:" && npm -v && node -v

我在官方示例上做了以下修改:

  1. 汉化

  2. 在检出时,我从 gitea.com 获取检出脚本,因为默认的 github.com 太慢了。

  3. 增加了打印 node 和 npm 版本,我想看看默认 ubuntu 是否有这两个环境。

如果忽略 .git 目录,现在项目文件夹下是这样的:

$ tree -I ".git" -a
.
├── .gitea
│   └── workflows
│   └── demo.yaml
└── README.md

3.第一次 push 和观察

git add .
git commit -m "创建了Actions文件"
git push

前往你的 Gitea 网站查看 Actions 触发情况:

image-20250424081825656

这里报错是因为我们的网络无法拉取 docker 镜像。解决方法:给 docker 配置加速镜像。由于本篇不是讲 docker,这里不展开讲如何配置 docker 网络,不懂可以去看 docker 的专栏笔记。

4.配置 docker 镜像加速后点击“重新运行所有任务”,这次运行成功了。以后每次 push 都会触发这个 Actions。

image-20250424083508777

六、创建 Actions 服务

你是否注意到,当前只是以终端命令的方式启动 act_runner:

$ ./act_runner daemon
INFO[2025-04-23T23:19:03Z] Starting runner daemon
INFO[2025-04-23T23:19:03Z] runner: actions, with version: v0.2.11, with labels: [ubuntu-latest ubuntu-22.04 ubuntu-20.04], declare successfully

如果关闭终端,这个 Runner 将从 Gitea 网站中离线:

image-20250424084446862


为了稳定使用这个 Runner,需要将 ./act_runner daemon 升级为 系统服务,并且开机自启动。

要将 ./act_runner daemon 升级为 系统服务(Systemd),你可以创建一个自定义的 systemd 服务文件。以下是完整操作步骤,假设你的 act_runner 放在 /home/youruser/act_runner 目录下。


1. 创建 systemd 服务文件

root 身份(或使用 sudo)执行以下命令:

sudo nano /etc/systemd/system/act-runner.service

内容如下(请根据实际路径调整):

[Unit]
Description=Gitea Actions Runner # 服务描述
After=network.target # 等网络服务启动后再启动本服务

[Service]
Type=simple # 简单服务类型,直接运行 ExecStart 命令
User=youruser # 运行服务的用户,请替换为实际用户名
WorkingDirectory=/home/youruser/act_runner # 指定工作目录,act_runner 所在路径
ExecStart=/home/youruser/act_runner/act_runner daemon # 启动命令
Restart=always # 进程退出时自动重启
RestartSec=5 # 重启间隔 5 秒
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 设置环境变量,确保系统路径可用

[Install]
WantedBy=multi-user.target # 表示在系统启动时自动加载本服务

例如,你的 act_runner 位于 /home/ubuntu/bin/act_runner,则示例如下:

[Unit]
Description=Gitea Actions Runner
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/bin
ExecStart=/home/ubuntu/bin/act_runner daemon
Restart=always
RestartSec=5
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[Install]
WantedBy=multi-user.target

📌 注意事项

  • User= 填你运行 act_runner 的用户,避免用 root,权限太高。
  • 如果你用的是相对路径或不同的 Shell 环境,也可以加一行 Environment=... 来扩展环境变量。
2. 重新加载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
3. 启动并设置开机自启
sudo systemctl enable --now act-runner
4. 检查运行状态
systemctl status act-runner

服务正常运行则输出:

$ sudo systemctl status act-runner.service
● act-runner.service - Gitea Actions Runner
Loaded: loaded (/etc/systemd/system/act-runner.service; enabled; preset: enab>
Active: active (running) since Thu 2025-04-24 00:57:09 UTC; 9s ago
Invocation: 4fb32e370d4e40a5a11f4ec07e7f4a1e
Main PID: 6713 (act_runner)
Tasks: 8 (limit: 4649)
Memory: 3.6M (peak: 4.4M)
CPU: 23ms
CGroup: /system.slice/act-runner.service
└─6713 /home/ubuntu/bin/act_runner daemon

此时回到你的 Gitea 网站,Runner 恢复在线(空闲):

image-20250424090403304


Git Actions 并没有详细的语法介绍,不过官方文档中提示 Gitea Actions 兼容(借鉴)GitHub Actions,所以你可以使用大部分 Github Actions 语法。

学习语法之后就可以愉快的使用 Actions 完成许多自动操作啦,最常见和实用的就是 push 代码后自动发布。