3)GitLab CI
🐣 第 1 题(基础概念)
Q1:GitLab CI/CD 是什么?它的核心工作流程是怎样的?
📝 标准答案:
GitLab CI/CD 是 GitLab 提供的持续集成与持续交付工具,允许开发者自动执行构建、测试、部署等任务。
核心概念:
名称 | 描述 |
---|---|
.gitlab-ci.yml | CI 的核心配置文件,定义 pipeline 的所有阶段 |
Pipeline | 一次完整的 CI/CD 执行流程,包含多个阶段(stage) |
Stage | 构建、测试、部署等阶段 |
Job | 每个 Stage 中具体的执行单元 |
Runner | 实际运行 Job 的环境,可分为 Shared 和 Specific |
基本流程图:
plaintext
push 代码 ➝ 触发 Pipeline ➝ 构建 ➝ 测试 ➝ 部署
🛠️ 第 2 题(YAML 配置)
Q2:如何编写一个简单的 GitLab CI 配置文件来构建并部署前端项目?
📝 标准答案:
示例 .gitlab-ci.yml
文件:
yaml
stages:
- build
- deploy
build-job:
stage: build
image: node:18
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
deploy-job:
stage: deploy
script:
- echo "Deploying..."
- scp -r dist/* user@server:/var/www/html/
only:
- main
说明:
- 使用
node:18
镜像构建项目; - 构建产物保存在
dist/
并作为部署阶段的输入; - 仅在
main
分支 push 时触发部署;
📦 第 3 题(环境与变量)
Q3:如何使用 GitLab CI 中的环境变量?哪些变量类型可用?
📝 标准答案:
GitLab CI 支持使用环境变量进行配置管理,分为:
类型 | 说明 |
---|---|
预定义变量 | GitLab 提供的变量(如 CI_COMMIT_SHA ) |
自定义变量 | 在 .gitlab-ci.yml 或 GitLab UI 中设置 |
Secret 变量 | 可在 GitLab UI 中加密设置,如 API_KEY、TOKEN |
使用方式:
yaml
script:
- echo "当前分支:$CI_COMMIT_BRANCH"
- echo "部署目标:$DEPLOY_ENV"
设置变量方法:
- GitLab ➝ Project ➝ Settings ➝ CI/CD ➝ Variables
🚀 第 4 题(K8s/CD 实践)
Q4:如何在 GitLab CI 中部署应用到 Kubernetes 集群?
📝 标准答案:
K8s 集成部署流程通常包含以下步骤:
- 设置
KUBECONFIG
作为 Secret 变量; - 使用
kubectl
执行更新; - 可结合
Helm
进行模板化管理;
示例 Job:
yaml
deploy:
stage: deploy
image: bitnami/kubectl:latest
script:
- echo "$KUBECONFIG" > kubeconfig
- export KUBECONFIG=$(pwd)/kubeconfig
- kubectl apply -f k8s/deployment.yaml
补充: 如果使用 Helm:
yaml
- helm upgrade --install myapp ./helm-chart --set image.tag=$CI_COMMIT_TAG
⚙️ 第 5 题(流水线优化)
Q5:如何提升 GitLab CI 的执行效率和可维护性?
📝 标准答案:
常用优化策略包括:
优化手段 | 说明 |
---|---|
缓存依赖 | 使用 cache: 缓存 node_modules、go mod 等依赖 |
分阶段执行 | 将构建、测试、部署分开处理,避免步骤冗余 |
并行 Job | 利用多个 Runner 并行处理无依赖的任务 |
条件触发 | 使用 only/except 、rules: 控制特定分支/标签触发 |
模板分离 | 使用 include: 将多个 YAML 拆分,提高可读性和复用性 |
缓存示例:
yaml
cache:
paths:
- node_modules/
分支触发部署示例:
yaml
deploy:
stage: deploy
only:
- tags
- main