CI/CD 流水线
iForge 内置完整的 CI/CD 系统,无需外置 Runner 即可开箱即用。
核心概念
| 概念 | 说明 |
|---|---|
| Pipeline | 一次推送触发的流水线,包含多个 Job |
| Job | 流水线中的一个任务步骤 |
| Runner | 执行 Job 的引擎(内置 Docker Executor / 外置 Runner) |
| Artifact | Job 产出的制品 |
| 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 容器中执行,并施加以下安全限制:
| 限制 | 值 | 说明 |
|---|---|---|
--memory | 2g | 内存上限 2GB |
--memory-swap | 2g | 禁止使用 swap |
--cpus | 2 | CPU 上限 2 核 |
--pids-limit | 256 | 进程数上限 |
--network | none | 默认禁用网络访问 |
Shell Executor(默认禁用)
安全警告
Shell Executor 在宿主机直接执行用户代码,存在严重安全风险。生产环境必须保持禁用。
如需在开发环境启用(仅限本地调试):
IFORGE_CI_ALLOW_SHELL_EXECUTOR=true
Runner 权限隔离
外置 Runner 支持三级作用域:
| 作用域 | 说明 |
|---|---|
| 全局 Runner | 可执行所有用户的 Job |
| 用户级 Runner | 只能执行指定用户的 Job |
| 仓库级 Runner | 只能执行指定仓库的 Job |
外置 Runner
支持外置 Runner 模式:
- 管理员在设置页面注册 Runner,获取 token
- Runner 使用 token 认证并轮询任务
- 适用于分布式构建场景
详见 Docker 部署 - CI/CD Runner 部署。
工作目录清理
Job 执行完成后,工作目录会被自动清理以防止磁盘空间耗尽。如需保留工作目录用于调试:
IFORGE_CI_KEEP_WORKDIR=true