GitLab CI 编程

在 GitLab CI/CD 中,"编程"主要通过 .gitlab-ci.yml 配置文件实现,结合 Shell 脚本、变量、模板和条件逻辑来构建灵活的自动化流程。以下是 GitLab CI 编程的核心要点和示例:

一、基础结构

每个 GitLab CI Pipeline 由 StagesJobs 组成:

stages:
  - build
  - test
  - deploy

job1:
  stage: build
  script:
    - echo "Building..."

二、变量编程

1. 定义变量

variables:
  APP_VERSION: "1.0.0"  # 静态变量
  DEPLOY_ENV: $CI_COMMIT_BRANCH == "main" ? "prod" : "staging"  # 条件变量

2. 动态生成变量

generate_vars:
  stage: setup
  script:
    - echo "DYNAMIC_VAR=$(date +%F)" > env.file
  artifacts:
    reports:
      dotenv: env.file  # 传递给后续Job

use_vars:
  stage: deploy
  script:
    - echo "Using $DYNAMIC_VAR"  # 读取动态变量

三、条件逻辑

1. rules 条件控制

deploy_prod:
  stage: deploy
  script: ./deploy.sh
  rules:
    - if: $CI_COMMIT_BRANCH == "main"  # 仅main分支执行
      when: manual                     # 手动触发
    - when: never                      # 其他情况跳过

2. only/except(旧版语法)

test:
  script: pytest
  only:
    - merge_requests  # 仅MR时触发

四、循环与并行

1. 并行矩阵(Matrix Jobs)

test:
  stage: test
  parallel:
    matrix:
      - PYTHON_VERSION: ["3.8", "3.9"]
        OS: ["ubuntu-latest", "windows-latest"]
  script:
    - echo "Testing Python $PYTHON_VERSION on $OS"

2. 动态生成 Job

include:
  - local: '/templates/.dynamic-jobs.yml'  # 外部模板生成Job

五、脚本编程

1. 多行脚本

job:
  script:
    - |
      echo "Multi-line script"
      if [ "$CI" == "true" ]; then
        echo "Running in GitLab CI"
      fi

2. 调用外部脚本

analyze:
  script:
    - chmod +x ./scripts/analyze.sh
    - ./scripts/analyze.sh

六、模板复用

1. extends 继承

.base_template:
  script:
    - echo "Common steps"

job:
  extends: .base_template
  script:
    - echo "Job-specific steps"

2. include 引入外部文件

include:
  - 'https://example.com/ci-templates.yml'
  - local: '/path/to/local-template.yml'

七、错误处理

1. 忽略失败

job:
  script:
    - flaky_command || true  # 失败继续执行

2. 重试机制

deploy:
  script: ./deploy.sh
  retry:
    max: 2
    when: runner_system_failure  # 仅在系统错误时重试

八、高级技巧

1. 人工审核(Manual Approval)

deploy_prod:
  stage: deploy
  script: ./deploy.sh
  when: manual  # 需手动点击执行

2. 父子 Pipeline

trigger_job:
  trigger:
    include: child-pipeline.yml  # 触发子Pipeline

3. 缓存优化

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - node_modules/

九、调试技巧

1. 打印环境变量

debug:
  script:
    - printenv | sort  # 查看所有环境变量

2. 本地验证

gitlab-runner exec docker job-name  # 本地运行测试

十、完整示例

stages:
  - build
  - test
  - deploy

variables:
  APP_NAME: "my-app"

build:
  stage: build
  script:
    - docker build -t $APP_NAME .
    - docker save $APP_NAME > app.tar
  artifacts:
    paths:
      - app.tar

test:
  stage: test
  script:
    - docker load < app.tar
    - docker run $APP_NAME pytest

deploy_prod:
  stage: deploy
  script:
    - scp app.tar user@server:/deploy
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

总结

GitLab CI 的编程能力体现在:

  1. 变量管理:静态/动态变量、环境变量注入
  2. 流程控制:条件逻辑、循环、错误处理
  3. 代码复用:模板继承、外部脚本调用
  4. 扩展性:父子Pipeline、API集成

通过组合这些功能,可以实现从简单构建到复杂企业级部署的全流程自动化。

进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务