GitLab-Pipeline

简介: gitlab

GitLab-Pipeline

一、Pipeline开发工具

  • 流水线视图
  • 流水线编辑器
  • Job作业视图
  • Schedules 定时运行
  • 环境变量

1.1 流水线视图

1.2 Schedule

image-20260708111139221

1.3 环境变量

image-20260708111438670

二、CI/CD设置

  • 全局配置
    • 是否公开访问Pipeline信息;
    • 是否自动取消相同分支已经在构建的Pipeline;
    • 部署Job成功后,跳过其他还未运行的部署作业;
    • ci文件的本地或远程位置;
  • 为项目设置流水线状态标志

skip ci

image-20260708140835204

三、Pipeline语法

3.1 Stages

If stages is not defined in the .gitlab-ci.yml file, the default pipeline stages are:

image-20260708151441327

设置settiing CI/CD General pipelines - CI/CD configure file

ci/stages.yml

pipeline editor: 编写新的pipeline

顺序运行

修改 gitlab-runner - config.toml 配置

concurrent = 10

stages:
  - .pre
  - build
  - test
  - deploy
  - .post

job0:
  tags:
    - go
  stage: .pre
  script:
      - echo "init"


job1:
  tags:
    - go
  stage: build
  script:
      - echo "build"

job2-1:
  tags:
    - go
  stage: test
  script:
      - echo "test1"

job2-2:
  tags:
    - go
  stage: test
  script:
      - echo "test2"

job3:
  tags:
    - go
  stage: deploy
  script:
      - echo "deploy"

job4:
  tags:
    - go
  stage: .post
  script:
      - echo "end"

image-20260708153325243

3.2 variables

variables:
  GIT_DEPTH: 0                    # 禁用浅克隆,完整拉取仓库
  GIT_STRATEGY: clone             # 强制完整克隆(而不是 fetch)
  GIT_FETCH_EXTRA_FLAGS: "--no-tags"  # 解决 fetch 兼容性问题

  BUILD_TOOLS: "mvn"
  RUNNER_TAG: "go"

stages:
  - build

job1:
  tags: 
    - ${RUNNER_TAG}
  stage: build
  variables:
    BUILD_TOOLS: "gradle22255"
  script:
    - echo $BUILD_TOOLS

3.3 jobs

语法关键字 作用 备注
variables 定义作业中的环境变量
tags 根据标签选择运行作业的构建节点 - 多个标签匹配所有标签构建节点;
- 标签可以使用变量
stage 指定当前作业所属的阶段名称
before_script 作业在运行前执行的shell命令行
script 作业在运行中执行的shell命令行 每个作业至少要包含一个script
after_script 作业在运行后执行的命令行
stages:
  - build

variables:
  RUNNER_TAG: "go"
before_script:
  - echo "global pipeline before script"
after_script:
  - echo "all done"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  before_script:
    - echo "before script ready"
  script:
    - echo "mvn package"
  after_script:
    - echo "after sciprt done"

job2:
  tags:
    - $RUNNER_TAG
  stage: build
  script:
    - echo 'job2'

image-20260715114904247

如果job没有 定义before ,after script,会使用全局的

3.3.1 job运行控制 allow_failure和when

关键字 作用 备注
allow_failure 控制作业状态,是否允许作业失败,默认值为false。启用后,如果作业运行失败,该作业将在用户界面中显示橙色警告。 管道认为作业成功/通过,不会别阻塞。假设所有其他作业均成功,则该作业的阶段及其管道将显示相同的橙色警告。但是,关联的提交将被标记为“通过”,而不会发出警告。
when 根据状态控制作业运行,当前面作业成功或者失败时运行。 on_success前面阶段成功时执行(默认值);
on_failure前面阶段失败时运行
always总是执行
manual手动执行
delayed延迟执行
never永不执行
stages:
  - build

variables:
  RUNNER_TAG: "go"
before_script:
  - echo "global pipeline before script"
after_script:
  - echo "all done"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  allow_failure: true
  before_script:
    - echo "before script ready"
  script:
    - echo "mvn package"
    - mvs
  after_script:
    - echo "after sciprt done"

job2:
  tags:
    - $RUNNER_TAG
  stage: build
  script:
    - echo 'job2'

image-20260715134727209

image-20260715134816850

stages:
  - build
  - test
variables:
  RUNNER_TAG: "go"
before_script:
  - echo "global pipeline before script"
after_script:
  - echo "all done"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  allow_failure: false
  before_script:
    - echo "before script ready"
  script:
    - echo "mvn package"
    - mvs
  after_script:
    - echo "after sciprt done"

job2:
  tags:
    - $RUNNER_TAG
  stage: test
  when: on_success
  script:
    - echo 'job2'

job3:
  tags:
    - $RUNNER_TAG
  stage: test
  when: on_failure
  script:
    - echo 'job3 is running  job2 skipped'

image-20260715140135437

manual 必须前面所有的阶段都是success

stages:
  - build
  - test
  - deploy
variables:
  RUNNER_TAG: "go"
before_script:
  - echo "global pipeline before script"
after_script:
  - echo "all done"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  allow_failure: true
  before_script:
    - echo "before script ready"
  script:
    - echo "mvn package"
    - mvs
  after_script:
    - echo "after sciprt done"

job2:
  tags:
    - $RUNNER_TAG
  stage: test
  when: on_success
  script:
    - echo 'job2 is running'

job3:
  tags:
    - $RUNNER_TAG
  stage: test
  when: on_failure
  script:
    - echo 'job2 is running  job3 skipped'
job4:
  tags:
    - $RUNNER_TAG
  stage: deploy
  when: manual
  script:
    - echo 'manual run'

image-20260715141357638

3.3.2 job运行控制retry和timeout

关键字 作用 备注
retry 作业重新运行,遇到错误重新运行的次数 值为整数
等于或大于0,但小于等于2
异常分类
timeout 作业运行超时时间
rules 根据特定的变量或文件变更来控制作业运行; if
changes
exists
needs 作业依赖控制 needs:["作业名称"]
parallel 生成多个作业,并行运行 parallel:5
值2-50之间
stages: 
  - build
  - test
  - deploy

variables:
  RUNNER_TAG: "go"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  retry: 2
  script:
    - echo "build task begin"
    - mvs

job2:
  tags: 
    - $RUNNER_TAG
  stage: test
  script:
    - echo "test task begin"

image-20260715143130493


配合条件使用,job2 不会retry

stages: 
  - build
  - test
  - deploy

variables:
  RUNNER_TAG: "go"

job1:
  tags: 
    - $RUNNER_TAG
  stage: build
  retry: 2
  script:
    - echo "build task begin"
    - mvs

job2:
  tags: 
    - $RUNNER_TAG
  stage: test
  when: on_failure
  script:
    - echo "test task begin"
    - mvs
  retry:
    max: 2
    when: api_failure
    # when: script_failure job2 会重试

3.4 rules

GitLab CI 的 rules 是从上到下匹配,匹配到第一个条件就停止,不再继续往后判断。

job1 不会运行

stages:
  - build

variables:
  RUNNER_TAG: "go"
  SKIP_BUILD: "false"

job1:
  tags:
    - $RUNNER_TAG
  stage: build
  rules:
    - if: $SKIP_BUILD != true
      when: never
    - when: always
  script:
    - echo "mvn packages"

job2:
  tags:
    - $RUNNER_TAG
  stage: build
  script:
    - echo "job2"

运行job1

stages:
  - build

variables:
  RUNNER_TAG: "go"
  SKIP_BUILD: "false"

job1:
  tags:
    - $RUNNER_TAG
  stage: build
  rules:
    - if: $SKIP_BUILD == "true"
      when: never
    - when: always
  script:
    - echo "mvn packages"

job2:
  tags:
    - $RUNNER_TAG
  stage: build
  script:
    - echo "job2"

changes 文件更改了触发job

stages:
  - build
  - test

variables:
  RUNNER_TAG: "go"
  SKIP_BUILD: "false"

job1:
  tags:
    - $RUNNER_TAG
  stage: build
  rules:
    - if: $SKIP_BUILD != "true"
      when: never
    - when: always
  script:
    - echo "mvn packages"

job2:
  tags:
    - $RUNNER_TAG
  stage: test
  rules:
    - changes: 
        - README.md #文件更改了触发job
        when: always
    when: never
  script:
    - echo "job2"

job3:
  tags:
    - $RUNNER_TAG
  stage: test
  script:
    - echo "job3"

变更文件触发

image-20260715153833346

stages:
  - build
  - test

variables:
  RUNNER_TAG: "go"
  SKIP_BUILD: "false"

job1:
  tags:
    - $RUNNER_TAG
  stage: build
  rules:
    - if: $SKIP_BUILD != "true"
      when: never
    - when: always
  script:
    - echo "mvn packages"

job2:
  tags:
    - $RUNNER_TAG
  stage: test
  rules:
    - changes: 
        - README.md #文件更改了触发job
      when: always
    -  when: never
  script:
    - echo "job2"

job3:
  tags:
    - $RUNNER_TAG
  stage: test
  rules:
    - exists: 
        - Dockerfile
      when: manual
    - when: never
  script:
    - echo "job3"

job4:
  tags:
    - $RUNNER_TAG
  stage: test
  script:
    - echo "job4"
# 只有job4运行

增加Dockerfile

手动运行job3

image-20260715155130366

相关文章
|
3月前
|
存储 Prometheus Kubernetes
Kubeasz 部署 K8s 生产方案
Kubeasz 部署 K8s 生产方案
|
10月前
|
Ubuntu 芯片 Windows
掌握timedatectl命令:Ubuntu 系统时间管理指南
掌握timedatectl命令:Ubuntu 系统时间管理指南
2345 121
|
3月前
|
Kubernetes 并行计算 算法框架/工具
|
3月前
|
存储 Kubernetes 调度
|
3月前
|
存储 关系型数据库 API
|
3月前
|
机器学习/深度学习 API Python
用 Scikit-LLM 和 Groq 搭建情感分析 pipeline
本文介绍如何用Scikit-LLM集成Groq的Llama 3.1模型,构建零样本情感分析Pipeline:基于IMDB数据集,通过文本清洗、零样本分类与scikit-learn标准接口,实现高效、易用的LLM驱动文本分类,兼顾简洁性与实用性。
181 2
用 Scikit-LLM 和 Groq 搭建情感分析 pipeline
|
3月前
|
人工智能 JSON API
Agentforce APIs 和 SDKs 开发指南
Agentforce 完整 API 和 SDK 生态指南。涵盖构建工具(Agent Script/DX/Python SDK)、测试工具(Testing Center/DX/Testing API)、对话工具(Agent API/Custom Connections/Mobile SDK/Enhanced Chat),以及 Agent API 深度实战:从创建 External Client App、获取 Token 到启动会话、发送同步/流式消息、处理 Citations、传递 Agent 变量、故障排查全流程。
200 1
|
3月前
|
人工智能 缓存 安全
AI Agent 凭证治理实践:从长期 API Key 到临时授权
AI Agent 不再只是生成文本,它会读取数据、调用工具、触发流程。本文从工程视角讨论为什么不应把长期 API Key 直接交给 Agent,并给出临时凭证、策略绑定、运行时拦截和审计归因的治理思路。
338 2
|
3月前
|
数据采集 传感器 人工智能
生活垃圾目标检测数据集:5类别、6,000张图像 | 目标检测
本数据集含6000张真实场景图像,涵盖玻璃、金属、纸张、塑料及“其他垃圾”5类,YOLO格式标注,适配YOLOv5/v8/v11等模型,专为智能垃圾分类研发打造,助力AI赋能城市环保治理。(239字)
374 2
|
3月前
|
存储 缓存 Linux
KubeVirt 镜像制作
KubeVirt 镜像制作