当前位置: 首页 > news >正文

【GitLab/CI】前端 CI

整体流程概览(流水线高层)

  1. 开发者把代码 push / open MR → 触发 GitLab Pipeline。
  2. Pipeline 按 stages(例如 install → lint → test → build → deploy)顺序执行,每个 stage 内的 job 并行。
  3. Runner(你为项目/组配置的)拉取镜像或启动容器,执行 job 的 before_script / script;job 可以产出 artifacts(构建产物)并写入 cache(依赖缓存)。
  4. 若某一步失败,CI 报红并把日志返回给 MR;成功后可触发部署(到测试/预发布/生产),或生成 Review App。

典型前端流水线(各阶段目的)

  • prepare(可选):准备环境、注入 secrets、生成 .npmrc、写 CA 等。
  • install:安装依赖(pnpm / npm / yarn),做 lockfile 校验(--frozen-lockfile)。
  • lint:静态代码检查(eslint 等)。快速失败,减少无效构建。
  • test:单元/集成测试(Jest、Vitest 等)。
  • build:生产构建(如 pnpm build),生成 dist
  • e2e(可选):端到端测试(Cypress / Playwright)。通常需要独立环境或 service。
  • deploy:将 dist 发布到测试/生产环境。

必备与常见的 .gitlab-ci.yml 配置项(逐条解释)

下面用示例同时讲解每个配置的作用。

stages:- prepare- install- lint- test- build- deployvariables:FRONTEND_DIR: frontendPNPM_STORE_DIR: .pnpm-storeNODE_ENV: productionimage: node:20cache:key: ${CI_COMMIT_REF_SLUG}-pnpm-storepaths:- .pnpm-store- frontend/node_modulesbefore_script:- cd ${FRONTEND_DIR}install:stage: installscript:- npm -g pnpm@7- pnpm config set store-dir ${PNPM_STORE_DIR}- pnpm install --frozen-lockfilecache:policy: pull-pushlint:stage: lintscript:- pnpm linttest:stage: testscript:- pnpm test --reporter=jest-junitartifacts:reports:junit: junit.xmlwhen: alwaysbuild:stage: buildscript:- pnpm buildartifacts:paths:- distexpire_in: 1 weekdeploy:stage: deployscript:- ./deploy-script.shonly:- main

解释(按配置项):

  1. stages:流水线的阶段顺序。stage 的顺序决定执行顺序,stage 内 job 并行。

  2. variables:定义 pipeline 内的环境变量(可在 job 中引用)。放敏感信息不要放在这里,要放 GitLab 的 CI/CD Variables。

  3. image:Runner 在执行 job 时用的容器镜像(Docker/Kubernetes executor 会拉这个镜像)。选稳定的 Node 镜像,或自建含依赖的镜像。镜像下载的策略:

    • never: 当使用这个策略,会禁止Gitlab Runner从Docker hub或者其他地方下拉镜像,只能使用自己手动下拉的镜像
    • if-not-present: 当使用这个策略,Runner会先检测本地是否有镜像,有的话使用该镜像,如果没有再去下拉。这个策略如果再配合定期删除镜像,就能达到比较好的效果
    • always: 这个是gitlab-ci默认使用的策略,即每一次都是重新下拉镜像,导致的结果就是比较耗时间
  4. cache:用于存依赖等来加速后续 job。key 决定缓存隔离粒度(按分支、commit、共享等)。paths 列出要缓存的目录。policy 可设 pull-push(默认),或 pull

  5. before_script:在每个 job 执行实际 script 前会执行的命令(可复用),常用于 cd、设置环境、解码 secrets。after_script同理。

  6. script:job 的要执行的命令(必须有)。很多错误就在这里可以看到。

  7. artifacts:job 成功后保留的文件供下个 stage 使用或供下载(如 dist、测试报告、coverage)。expire_in 控制保存时间。

  8. only/exceptrules:控制何时触发 job。rules 更灵活,推荐使用 rules 替代 only/except

  9. artifacts.reports:特殊用途的 artifacts,比如 junit 测试报告或 coverage,可在 GitLab UI 显示测试结果。

  10. when:controls when artifact is uploaded (always, on_success, on_failure)。

  11. needs:允许跳过 stage 顺序,直接使用另一个 job 的 artifacts,能加速 pipeline(注意并发与资源)。

  12. services:只想其他 docker 镜像,这些镜像会合 image 制定的镜像绑定。

  13. retry, timeout, parallel:job 重试次数、最长时长、并行 matrix(并发运行多个相同 job)。

lockfile 与可重复构建

  • 强制使用 --frozen-lockfile(pnpm)或 npm ci(npm)可保证 CI 严格按锁文件安装。若本地修改了 package.json 却没更新锁文件,CI 会失败——这是好事,防止无意识升级。
  • 若想在 CI 自动更新 lockfile(不推荐),可在临时 job 使用 pnpm install --no-frozen-lockfile,并把新的 lockfile 提交/创建 MR。不过优先流程应是本地开发者更新并提交锁文件。

在 GitLab 上如何配置(UI 操作)

  1. 编写自己项目的 .gitlab-ci.yml 。包含想要执行的各种指令(代码检查、自动打包、自动部署等)。

  2. 项目 -> 构建 -> 流水线 -> 新流水线:

    • 可以创建流水线。
  3. 项目 → Settings → CI/CD → Variables:

    • 添加变量:KeyValue,并设置 Protected(仅在受保护分支/Tags 使用)、Masked(在 job 日志中隐藏)。
    • 用于 token(例如 PRIV_TOKEN)、CA(建议用 base64 存储 INTERNAL_CA_B64)、其他 secret。
  4. Pipeline 页面:可以查看最近的 pipeline,点击 pipeline id 查看各 job 日志、artifacts、测试报告。修改.gitlab-ci.yml文件,直接修改、增添远程仓库项目内容,合并请求等操作也会自动触发流水线。或者手动点击 run pipeline 触发流水线。

  5. Jobs 页面:查看某个 job 的详细日志;可在 job 上点 “Retry” 重新跑,或点击 Debug(如果 runner 支持交互调试)。pipeline 包含多个 stage 阶段,每个 stage 阶段包含多个 job 作业。

  6. Environments / Releases:用于管理部署环境(staging/prod),可以把 Deploy job 绑定到环境,并在 GitLab UI 看到部署历史。

  7. Protected Branches:设置哪些分支能触发 Protected CI(配合 Protected variables 使用)。

http://www.dtcms.com/a/545716.html

相关文章:

  • 做教育行业网站如何利用织梦cms做企业网站
  • 【开题答辩全过程】以 儿童游泳预约系统为例,包含答辩的问题和答案
  • 《Vue项目开发实战》第一章:项目环境配置
  • 外贸管理网站模板wordpress评论邮箱
  • 基于Python Web的大数据系统监控平台的设计与实现
  • 哈尔滨企业展示型网站建设专业做营销网站建设
  • 手机网站相册代码wordpress二维码 插件下载
  • 基于电鱼 ARM 工控机的AI视频智能分析方案:让传统监控变得更聪明
  • 邢台哪儿能做网站成都有什么好玩的吗
  • Ansible自动化部署ECS与Nginx全流程
  • 架构论文《论软件测试理论及其应用》
  • .net 8压榨rabbitMq性能
  • 关于jupyter notebook调用GPU
  • 网站的建设课程做网站的实训报告
  • 商业网站的设计与推广系统湖南做网站
  • Adobe Lightroom Classic下载与安装教程(附安装包) 2025最新版详细图文安装教程
  • 仓颉语言赋能鸿蒙应用开发:UI主题样式定制的深度实践
  • 什么是 Adobe Experience Platform (AEP)?
  • 男孩子怎么做网站推广查询域名是否备案?
  • 帝国cms 关闭网站企业管理咨询心得体会
  • StarRocks 在 Cisco Webex 的探索与实践
  • 线程等待、终止与资源回收
  • NestJS 系列教程(十一):集成 Swagger 实现自动 API 文档与接口测试
  • 深圳招聘网站推荐上海华东建设发展设计有限公司网站
  • 网站建设 应酷wordpress4.0安装教程
  • SQlite:电影院售票系统中的主键(单列,复合)约束应用
  • 美橙互联网站建设涟水建设银行网站
  • 【推荐系统】深度学习训练框架(二):深入剖析Spark Cluster模式下DDP网络配置解析
  • 左右左右网站深圳云网站建站公司
  • npm error code ERR_SSL_TLSV1_UNRECOGNIZED_NAME