CICD

zy123
2025-09-06 /  0 评论 /  0 点赞 /  3 阅读 /  772 字
最近更新于 09-08

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

还是设置整个实例好!!

image-20250906093053870

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

image-20250906093429300

image-20250906093940832

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中可以把里面的内容复制过去。

image-20250906211618762

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之后

image-20250906103658624

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
取消