CI/CD 自动部署项目
使用Gitea Actions
1)启用Gitea Actions:
编辑你的Gitea服务器配置文件 app.ini
(通常位于 /etc/gitea/
或 Gitea 安装目录),添加:
[actions]
ENABLED = true
然后重启Gitea服务。
2)在部署服务器上安装Runner:
# 1. 下载并安装 act_runner (需要sudo)
sudo wget https://gitea.com/gitea/act_runner/releases/download/v0.2.10/act_runner-0.2.10-linux-amd64 -O /usr/local/bin/act_runner
sudo chmod +x /usr/local/bin/act_runner
# 2. 为Runner创建专用工作目录(推荐使用绝对路径)
sudo mkdir -p /opt/gitea-runner
sudo chown $USER:$USER /opt/gitea-runner # 将目录所有权给当前用户
cd /opt/gitea-runner
# 3. 注册Runner(重要:必须添加labels标签)
act_runner register --no-interactive \
--instance https://你的gitea域名.com \
--token <你的令牌> \
--name my-runner \
--labels self-hosted,linux # 这个标签必须与工作流文件中的runs-on匹配
# 4. 启动Runner(后台运行)
nohup act_runner daemon > runner.log 2>&1 &
# 5. 查看运行状态和日志
tail -f runner.log
ps aux | grep act_runner
3)令牌获取:
如果你想给整个实例用 → 站点管理员设置 → Actions → Runners。 如果只想给某个仓库用 → 进入该仓库 → Settings → Actions → Runners。
点击 New Runner,系统会生成一个 TOKEN
。
例如:abcdef1234567890
还是设置整个实例好!!
4)将act_runner注册为服务自启动
sudo vim /etc/systemd/system/act_runner.service
写入以下内容:
[Unit]
Description=Gitea Actions Runner
After=network.target
[Service]
ExecStart=/usr/local/bin/act_runner daemon
WorkingDirectory=/opt/gitea-runner
User=zy123
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
-
ExecStart
指向你安装的act_runner
路径(你已经放在/usr/local/bin/
了)。 -
WorkingDirectory
可以写你打算存放 Runner 缓存的目录(比如/home/zy123/act_runner
,你已经在这里 register 过了)。 -
User=zy123
保证 Runner 以你当前用户运行,而不是 root。
重新加载 systemd 配置:
sudo systemctl daemon-reexec
启动并开机自启:
sudo systemctl enable --now act_runner
查看运行状态:
systemctl status act_runner
5)在后端仓库根目录下,新建目录和文件:
.gitea/workflows/deploy.yml
写入以下内容:
name: Deploy Backend
on:
push:
branches: [ "master" ] # master 分支推送时触发
jobs:
build-and-deploy:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Create application-local.yml
run: |
mkdir -p src/main/resources/
cat << 'EOF' > src/main/resources/application-local.yml
${{ secrets.APPLICATION_LOCAL_YML }}
EOF
- name: Build and restart smile-picture
run: |
cd docs/tags/picture-v1.0
docker compose -f docker-compose-app-v1.0.yml build smile-picture-backend
docker compose -f docker-compose-app-v1.0.yml up -d smile-picture-backend
- name: Cleanup dangling images
run: docker image prune -f
特别注意,application-local没有用git管理,把它存在了Actions的密钥中:
然后deploy.yml中可以把里面的内容复制过去。
6)工作原理
1.Runner 接收任务
当你 push 到 main
分支时:
- Gitea 会触发 workflow(
.gitea/workflows/deploy.yml
)。 - 服务器上的
act_runner
会接收到这个任务,并开始执行jobs.build-and-deploy
。
2.actions/checkout@v3
这一行的作用是:它会把你刚刚 push 的最新代码 完整克隆 到 Runner 的工作目录。
/home/<你的用户>/actions-runner/_work/<repo名>/<repo名>/
所以,这时候你的项目在 Runner 的临时目录里已经是最新代码了,不需要 git pull
。
3.后续 cd docs/tag/group-buy-v3.0
都是在 这个临时目录 里执行的。
相当于你在服务器上的临时副本中:
- 用
docker compose build
构建镜像 - 用
docker compose up -d
启动/更新容器
4.Runner 每次执行 workflow 时,工作目录都会 重新 checkout 最新代码。
默认不会自动清理旧目录,但可以在 workflow 里加 actions/checkout
的参数来控制,比如 clean: true
。.
7)git push之后