不先推代码,几秒跑完流水线:gitlab-ci-local 本地 CI 测试实操手册
不先推代码几秒跑完流水线gitlab-ci-local 本地 CI 测试实操手册【免费下载链接】gitlab-ci-localTired of pushing to test your .gitlab-ci.yml?项目地址: https://gitcode.com/GitHub_Trending/gi/gitlab-ci-local你改了 .gitlab-ci.yml 里一条 rules就得推送、等远程排队、几分钟后看它失败。gitlab-ci-local 把这个循环搬回本机不用 push整条流水线在本地跑几秒出结果。本地顶替远程 Runner 的工具gitlab-ci-local 是一个 TypeScript CLI读取你的 .gitlab-ci.yml展开 stages、rules、needs、cache、artifacts再用 shell 或 docker 执行器把 job 按顺序跑掉。说白了它是 GitLab Runner 的本地替身有三点要分清它不是 GitLab Runner 服务不替代服务器上的真流水线只做推送前验证不需要再维护一套 make 式的本地脚本yml 本身就是可执行的不只跑 shell 简单 jobjob 声明了 image 就能用 docker 执行器模拟容器环境三步跑通第一条本地流水线先装再在仓库目录里直接跑。Debian 系可用 apt 装macOS 用 brewnpm 最通用npm install -g gitlab-ci-local gitlab-ci-local只要当前目录有 .gitlab-ci.yml 就能直接跑git 上下文由它自己处理配置放在别处时加 --file doctor-strange.yml。跑完会看到各 stage、各 job 的日志job 失败会像服务器上一样中断流水线。先学会这三个最有用的功能--list 先预览再执行。跑之前先看会加入哪些 job、各在哪个 stage、依赖谁when: never 的 job 会被自动过滤gitlab-ci-local --list输出是 name、description、stage、when、allow_failure、needs 几列的表格整条流水线一眼看全--list-csv 则给脚本用。Description 给 job 加人话备注。在 job 上方写一行注释就会出现在 --list 表格里不熟悉流水线的同事也能看懂每个 job 干嘛# Description Install npm packages npm-install: image: node script: - npm install --no-audit变量文件把机密留在仓库外。默认读取 .gitlab-ci-local-variables.yml写进去的值对 job 就是普通 CI/CD 变量AUTHORIZATION_PASSWORD: djwqiod910321 DOCKER_LOGIN_PASSWORD: dij3213n123n12in3再把它加进 .gitignore 即可放到 $HOME/.gitlab-ci-local/variables.yml 下还能按仓库、group 或全局分级下发。拿官方示例走一遍看制品怎么流转examples/docker-compose-nodejs 里有个完整演示npm-install 装依赖并把 node_modules/ 作为 artifacts 产出npm-audit 和 npm-outdated 做安全扫描和版本检查最后 docker-compose-up 用 docker compose 起一个 webserver 容器。一条命令跑完整流程gitlab-ci-local --cwd examples/docker-compose-nodejs/产出的不只是日志npm-install 的 artifacts 会传给下游 jobcompose 容器真的会启动。玩完再手动跑 docker-compose-down 这个 job 停掉服务之后改镜像、加 job 随便折腾不用碰远程仓库。源码结构与测试怎么组织项目用 TypeScript 写、Bun 构建核心逻辑按职责切分src/parser.ts 负责 .gitlab-ci.yml 的解析与展开extends、include、变量src/executor.ts 管 job 的执行顺序与并发src/job.ts 管单个 job 的容器生命周期src/validator.ts 按 schema 校验配置。测试基于 vitesttests/test-cases/ 下有 162 个场景目录比如 needs-parallel、include-project-file排查某个具体行为时很顺手bunx vitest run 指向单个目录即可只跑那一个。独立二进制由 bun build --compile 打出覆盖 Linux、macOS、Windowsnpm 分发的是面向 Node 的 dist 包两条路线互不影响。常见报错与进阶开关job 里看不到未提交的文件 → 隔离 job 只同步 tracked 文件先 git add 再跑外部 include 内容没更新 → 外部 include 只拉一次并缓存加 --fetch-includes 强制重拉某个 job 只想在本地跑 → rules 里写 if: $GITLAB_CI false本地才执行、服务器上跳过shell job 的制品污染了工作目录 → 加 --shell-isolation 模拟服务器侧的制品处理配置文件不叫 .gitlab-ci.yml → --file 指定或用 GCL_FILE、GCL_NEEDS、GCL_TIMESTAMPS 这类环境变量预设跑全量太慢 → 把 job 名直接当参数传进去只跑那一个 job文件一保存流水线已经在跑了推送—等待—失败的循环到此为止。源码在https://gitcode.com/GitHub_Trending/gi/gitlab-ci-localgit clone 用issue 和 PR 都欢迎提。【免费下载链接】gitlab-ci-localTired of pushing to test your .gitlab-ci.yml?项目地址: https://gitcode.com/GitHub_Trending/gi/gitlab-ci-local创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考