Gitlab ci 如何实现-流程控制

在 GitLab CI/CD 中,流程控制主要通过 条件判断、阶段依赖、人工干预 等机制实现,以下是 7 种核心流程控制方法及具体示例:

一、条件执行(rules

最灵活的流程控制方式,支持 if/changes/exists 等规则:

test:
  script: pytest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"       # 仅main分支执行
    - if: $CI_MERGE_REQUEST_ID              # MR时执行
    - changes:                              # 文件变化时执行
        - src/**/*.py
        - tests/*
    - when: never                           # 默认拒绝

二、阶段依赖(needs

打破阶段顺序限制,实现并行或选择性执行:

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

unit_test:
  stage: test
  needs: ["build"]  # 显式依赖build阶段
  script: echo "Unit tests"

e2e_test:
  stage: test
  needs: []         # 不依赖任何Job,立即执行
  script: echo "E2E tests"

三、人工干预(when: manual

需要手动点击才能继续流程:

deploy_prod:
  stage: deploy
  script: ./deploy.sh
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual  # 手动批准后执行
    - when: never

四、动态生成子流程(trigger

根据条件触发不同的子 Pipeline:

generate_child:
  stage: setup
  script: ./generate-pipeline.py
  artifacts:
    paths:
      - child-pipeline.yml

trigger_child:
  stage: deploy
  trigger:
    include:
      - artifact: child-pipeline.yml
        job: generate_child

五、失败处理(allow_failure

允许非关键任务失败而不中断流程:

notify_slack:
  script: ./notify.sh
  allow_failure: true  # 即使失败也不阻塞后续Job

六、重试机制(retry

自动重试失败的 Job:

flakey_test:
  script: ./run-flakey-test.sh
  retry:
    max: 2             # 最多重试2次
    when: runner_system_failure  # 仅在系统错误时重试

七、超时控制(timeout

防止 Job 无限卡死:

long_running_job:
  script: ./slow-process.sh
  timeout: 1 hour  # 超时设置

流程控制组合示例

stages:
  - build
  - test
  - deploy

variables:
  DEPLOY_ENV: $CI_COMMIT_BRANCH == "main" ? "prod" : "staging"

build:
  stage: build
  script: docker build -t app .
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH

test:
  stage: test
  needs: ["build"]
  script: ./run-tests.sh
  retry: 2
  timeout: 30 minutes

deploy:
  stage: deploy
  script: ./deploy-$DEPLOY_ENV.sh
  rules:
    - if: $DEPLOY_ENV == "prod"
      when: manual
    - if: $DEPLOY_ENV == "staging"
      when: on_success

关键技巧

  1. 条件表达式:
  2. 文件变化检测:
  3. 变量驱动流程:

调试建议

  1. 可视化流程:GitLab Pipeline 页面可直观查看阶段依赖关系:
  2. 模拟运行:

通过组合这些方法,可以实现从简单线性流程到复杂决策树的完整控制。

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

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

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务