跳到主要内容

CI/CD 流水线

iForge 内置完整的 CI/CD 系统,无需外置 Runner 即可开箱即用。

核心概念

概念说明
Pipeline一次推送触发的流水线,包含多个 Job
Job流水线中的一个任务步骤
Runner执行 Job 的引擎(内置 Docker Executor / 外置 Runner)
ArtifactJob 产出的制品
Environment部署环境(staging/production)
Cron定时触发的流水线

配置文件

在仓库根目录添加 .iforge-ci.yml

stages:
- test
- build
- deploy

test:
stage: test
image: golang:1.21
script:
- go test ./...
only:
- main
- merge-requests

build:
stage: build
image: golang:1.21
script:
- go build -o iforge ./cmd/server
artifacts:
paths:
- iforge

deploy:
stage: deploy
image: alpine:latest
script:
- echo "Deploying..."
only:
- main
when: manual
必须指定 image

所有 CI/CD Job 必须指定 image 字段,以确保在隔离的 Docker 容器中执行。这保证了执行环境的一致性,并防止在宿主机上直接执行用户代码。

触发方式

  • 推送触发:push 到指定分支自动触发
  • MR 触发:创建/更新 MR 时触发
  • 手动触发:在 Pipeline 详情页手动触发 Job
  • 定时触发:配置 Cron 表达式定时执行

安全机制

Docker 沙箱隔离

所有 Job 默认在 Docker 容器中执行,并施加以下安全限制:

限制说明
--memory2g内存上限 2GB
--memory-swap2g禁止使用 swap
--cpus2CPU 上限 2 核
--pids-limit256进程数上限
--networknone默认禁用网络访问

Shell Executor(默认禁用)

安全警告

Shell Executor 在宿主机直接执行用户代码,存在严重安全风险。生产环境必须保持禁用

如需在开发环境启用(仅限本地调试):

IFORGE_CI_ALLOW_SHELL_EXECUTOR=true

Runner 权限隔离

外置 Runner 支持三级作用域:

作用域说明
全局 Runner可执行所有用户的 Job
用户级 Runner只能执行指定用户的 Job
仓库级 Runner只能执行指定仓库的 Job

外置 Runner

支持外置 Runner 模式:

  1. 管理员在设置页面注册 Runner,获取 token
  2. Runner 使用 token 认证并轮询任务
  3. 适用于分布式构建场景

详见 Docker 部署 - CI/CD Runner 部署

工作目录清理

Job 执行完成后,工作目录会被自动清理以防止磁盘空间耗尽。如需保留工作目录用于调试:

IFORGE_CI_KEEP_WORKDIR=true