GitHub Actions → GitLab CI 模板迁移对照表
GitHub Actions 概念/功能 | GitLab CI 对应实现方式 | 说明 |
uses: 公共 Action | include: project: (内部模板仓库) 或 include: remote: (GitHub raw YAML) | GitHub 有 Action Marketplace,GitLab 没有,通常要自己维护一个模板仓库 |
jobs.<name>.steps.uses (Docker Action) | image: + 自定义脚本 | 在 GitLab 里封装成一个 Docker 镜像,CI job 直接基于这个镜像运行 |
jobs.<name>.steps.run | script: | 基本一致,直接写 shell 命令即可 |
with: (传参给 Action) | variables: | 用变量给 job 或模板传参 |
workflow 复用 (workflow_call ) | include: + extends: | GitLab 通过 include 外部文件,再用 extends 复用定义 |
on: push/pull_request | only:/except: 或 rules: | 触发条件的写法不一样 |
Marketplace(官方/社区 Action) | GitLab 没有,需要用: ① 内部模板仓库;② 远程 YAML (remote: );③ Docker 镜像;④ 共享脚本仓库 | 没有“商店”,要么自己造,要么用 remote 拉公共 YAML |
🔧 示例对照
GitHub Action(checkout + Node.js)
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm ci
- run: npm run build
GitLab CI 等价写法
方式 1:直接写在 .gitlab-ci.yml
build:
image: node:20
script:
- git clone $CI_REPOSITORY_URL .
- npm ci
- npm run build
方式 2:用共享模板(推荐)
ci-templates/build.yml
(放在公共仓库里):
.node_build:
image: node:20
script:
- npm ci
- npm run build
业务项目 .gitlab-ci.yml
:
include:
- project: 'your-group/ci-templates'
ref: main
file: '/build.yml'
build:
extends: .node_build
这样多个项目都能像 GitHub Action 那样“挂载”公共组件。
⚡ 总结:
- GitHub Action = 现成市场,用
uses:
引入别人做好的东西。
- GitLab CI = 模板复用,靠
include
和 extends
,通常要自己维护“模板仓库”或者 Docker 镜像。