首页
/ Gitea Actions:自托管CI/CD实战

Gitea Actions:自托管CI/CD实战

2026-02-04 04:06:24作者:郁楠烈Hubert

痛点与承诺

还在为CI/CD(持续集成/持续部署)服务的高昂费用和网络延迟烦恼吗?还在担心代码安全性和数据隐私问题吗?Gitea Actions为你提供了完美的解决方案——完全自托管的CI/CD工作流,让你在私有环境中享受GitHub Actions级别的自动化体验!

读完本文,你将掌握:

  • ✅ Gitea Actions核心架构与工作原理
  • ✅ 从零搭建自托管Runner的完整流程
  • ✅ 实战编写高效的工作流配置文件
  • ✅ 高级技巧:缓存优化、矩阵构建、自定义Action
  • ✅ 企业级部署最佳实践与故障排除

Gitea Actions架构解析

Gitea Actions采用与GitHub Actions兼容的架构设计,主要由三个核心组件构成:

flowchart TD
    A[Gitea Server] --> B[Workflow YAML文件]
    B --> C[Actions调度器]
    C --> D[自托管Runner]
    D --> E[执行环境<br>Docker/本地]
    E --> F[构建结果]
    F --> G[状态反馈]
    G --> A

核心组件说明

组件 职责 部署位置
Gitea Server 工作流定义存储与调度 主服务器
Act Runner 任务执行引擎 任意节点
工作流文件 CI/CD流程定义 代码仓库

环境准备与Runner部署

系统要求

  • Gitea版本:≥1.19.0(推荐最新稳定版)
  • Runner节点:Linux/Windows/macOS,Docker环境
  • 网络:Runner与Gitea服务器双向可达

安装Act Runner

# 下载最新版Runner
wget https://dl.gitea.com/act_runner/releases/download/v0.2.6/act_runner-0.2.6-linux-amd64 -O act_runner
chmod +x act_runner
sudo mv act_runner /usr/local/bin/

# 注册Runner到Gitea实例
act_runner register \
  --instance https://your-gitea-domain.com \
  --token YOUR_RUNNER_TOKEN \
  --name my-runner \
  --labels ubuntu-latest,docker

配置详解

创建Runner配置文件 config.yaml

log:
  level: info

runner:
  file: .runner
  capacity: 10
  fetch_timeout: 5s
  fetch_interval: 2s

cache:
  enabled: true
  dir: ""
  host: ""
  port: 0
  ssl: false

container:
  network: bridge
  privileged: false
  options:
  workdir: /tmp/act
  userns: ""

host:
  workdir: /tmp/act

http:
  address: :8080
  tls: false
  cert: ""
  key: ""

工作流编写实战

基础工作流示例

创建 .gitea/workflows/ci.yml

name: Go CI Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Go
      uses: actions/setup-go@v5
      with:
        go-version: '1.21'

    - name: Install dependencies
      run: go mod download

    - name: Run tests
      run: go test -v ./...

    - name: Build binary
      run: go build -o myapp .

  docker-build:
    runs-on: ubuntu-latest
    needs: test
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    - name: Login to容器仓库
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
        password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}

    - name: Build and push
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: user/app:latest

高级特性:矩阵构建

jobs:
  test-matrix:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [1.20, 1.21, 1.22]
        platform: [linux/amd64, linux/arm64]
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      
    - name: Set up Go ${{ matrix.go-version }}
      uses: actions/setup-go@v5
      with:
        go-version: ${{ matrix.go-version }}
        
    - name: Test on ${{ matrix.platform }}
      run: go test ./...

缓存优化策略

steps:
- name: Cache Go modules
  uses: actions/cache@v3
  with:
    path: |
      ~/.cache/go-build
      ~/go/pkg/mod
    key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
    restore-keys: |
      ${{ runner.os }}-go-

- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: node_modules
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

企业级最佳实践

安全配置

# 限制Runner权限
runner:
  capacity: 5
  container:
    privileged: false
    network: bridge

# 使用安全密钥
env:
  CONTAINER_REGISTRY_TOKEN: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}
  SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

监控与日志

# 查看Runner状态
act_runner list

# 查看运行日志
journalctl -u act_runner -f

# 监控资源使用
docker stats $(docker ps -q --filter name=act-)

多环境部署策略

graph TB
    A[开发环境] --> B[自动触发<br>单元测试]
    B --> C[代码审查]
    C --> D[预发布环境]
    D --> E[集成测试]
    E --> F[生产部署]
    F --> G[监控验证]
    
    style A fill:#e1f5fe
    style D fill:#fff3e0
    style F fill:#f1f8e9

常见问题排查

Runner连接问题

# 检查网络连通性
curl -I https://your-gitea-domain.com

# 检查token有效性
act_runner verify --instance https://your-gitea-domain.com --token YOUR_TOKEN

# 查看详细日志
act_runner --log-level debug daemon

工作流执行失败

  1. 权限问题:检查Docker socket权限
  2. 资源不足:调整Runner的capacity配置
  3. 网络超时:增加fetch_timeout配置

性能优化建议

场景 优化策略 预期效果
大量小任务 增加Runner数量 并行处理提升
大文件传输 启用缓存机制 减少网络IO
复杂构建 使用更强大的Runner节点 缩短构建时间

总结与展望

Gitea Actions为自托管Git服务提供了企业级的CI/CD能力,具备以下核心优势:

  • 🛡️ 完全可控:所有组件部署在私有环境
  • 💰 零成本:无需支付SaaS服务费用
  • 🔒 数据安全:代码和构建产物不出内网
  • 高性能:局域网内高速传输
  • 🔧 高度可定制:支持自定义Runner和Action

随着Gitea生态的不断完善,Actions功能将持续增强,未来将支持更多高级特性如:

  • 更细粒度的权限控制
  • 更强大的缓存机制
  • 更丰富的可视化界面

现在就开始你的自托管CI/CD之旅,享受完全掌控的自动化开发体验!


下一步行动

  1. 部署Gitea Runner到你的测试环境
  2. 创建第一个工作流配置文件
  3. 体验高效的自动化构建流程

记得点赞、收藏、关注三连,下期我们将深入探讨Gitea Actions的高级用法与性能调优技巧!

登录后查看全文
热门项目推荐
相关项目推荐