GitLab CI 编程
在 GitLab CI/CD 中,"编程"主要通过 .gitlab-ci.yml
配置文件实现,结合 Shell 脚本、变量、模板和条件逻辑来构建灵活的自动化流程。以下是 GitLab CI 编程的核心要点和示例:
一、基础结构
每个 GitLab CI Pipeline 由 Stages 和 Jobs 组成:
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 的编程能力体现在:
- 变量管理:静态/动态变量、环境变量注入
- 流程控制:条件逻辑、循环、错误处理
- 代码复用:模板继承、外部脚本调用
- 扩展性:父子Pipeline、API集成
通过组合这些功能,可以实现从简单构建到复杂企业级部署的全流程自动化。
进阶高级测试工程师 文章被收录于专栏
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart