GitLab CI/CD 中定义Job(任务)

在 GitLab CI/CD 中定义一个 Job(任务)是通过编写 .gitlab-ci.yml 配置文件实现的。以下是 定义 Job 的完整指南,包含基础语法、关键参数和实际示例:


一、Job 的基本结构

每个 Job 需要包含:

  1. 唯一名称(不能重复)
  2. script 指令(必需,定义要执行的命令)
job_name:              # Job名称(自定义,如 build、test)
  script:              # 必需:执行的命令
    - echo "Hello World"

二、Job 的核心配置项

1. 关联阶段(stage
  • 指定 Job 属于哪个阶段(需先定义 stages
stages:
  - build
  - test

build_job:            # 属于 build 阶段
  stage: build
  script: make build
2. 执行条件(rulesonly/except
  • 推荐用 rules(更灵活):
deploy_job:
  script: ./deploy.sh
  rules:
    - if: $CI_COMMIT_BRANCH == "main"  # 仅 main 分支执行
      when: manual                     # 手动触发
    - when: never                      # 其他情况跳过
3. 依赖其他 Job(needs
  • 跳过阶段顺序限制,直接依赖指定 Job:
test_job:
  needs: ["build_job"]  # 依赖 build_job 完成
  script: npm test
4. 运行环境(imageservices
  • 指定 Docker 镜像和依赖服务:
test_job:
  image: python:3.9     # 使用 Python 镜像
  services:
    - postgres:14       # 启动 PostgreSQL 服务
  script: pytest

三、Job 的高级配置

1. 并行执行(parallel
test_job:
  parallel: 5           # 启动 5 个并行实例
  script: ./test.sh
2. 重试机制(retry
flakey_job:
  script: ./flakey-script.sh
  retry:
    max: 2              # 最多重试 2 次
    when: runner_system_failure  # 仅在系统错误时重试
3. 超时控制(timeout
long_job:
  script: ./long-task.sh
  timeout: 1 hour       # 设置超时时间
4. 缓存与制品(cache/artifacts
build_job:
  script: npm install && npm run build
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/   # 缓存依赖
  artifacts:
    paths:
      - dist/           # 传递给后续 Job
    expire_in: 1 week   # 制品保留时间
5. 环境变量(variables
deploy_job:
  variables:
    ENV: "production"   # 定义 Job 级变量
  script: echo "Deploying to $ENV"

四、Job 生命周期控制

1. 前置/后置脚本(before_script/after_script
job:
  before_script:
    - echo "Job 开始时间: $(date)"
  script:
    - echo "主任务执行"
  after_script:
    - echo "Job 结束时间: $(date)"
2. 人工干预(when: manual
deploy_prod:
  script: ./deploy.sh
  when: manual         # 需手动点击执行
3. 允许失败(allow_failure
notify_job:
  script: ./notify.sh
  allow_failure: true  # 失败不影响 Pipeline 状态

五、完整 Job 示例

stages:
  - build
  - test
  - deploy

build_android:
  stage: build
  image: android-sdk:latest
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

run_tests:
  stage: test
  needs: ["build_android"]  # 依赖 build_android
  image: ubuntu:22.04
  script:
    - apt-get update && apt-get install -y python3
    - python3 -m pytest
  parallel: 3               # 并行运行 3 个实例

deploy_staging:
  stage: deploy
  variables:
    TARGET: "staging"
  script: ./deploy.sh $TARGET
  when: manual             # 手动触发

六、最佳实践

  1. 命名规范:使用 小写_蛇形命名(如 build_android
  2. 单一职责:每个 Job 只完成一个明确任务
  3. 资源控制:为计算密集型 Job 指定特定 Runner 标签:
    job:
      tags:
        - docker-heavy  # 使用标记为 docker-heavy 的 Runner
    
  4. 调试技巧:在脚本中添加 set -x 显示详细执行日志:
    script:
      - set -x  # 开启调试模式
      - ./your_script.sh
    

通过合理组合这些配置,可以构建出高效、稳定的 CI/CD Job!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fro.Heart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值