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

相关文章
|
5天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
4天前
|
SQL 人工智能 自然语言处理
大模型内容安全实时防护:恶意Prompt注入拦截、越权阻断与熔断机制方案.166
本文系统阐述大模型输入安全防护体系,涵盖提示词注入、恶意Prompt拦截、越权阻断与输入熔断四大核心风险及应对方案。提出四层防护架构(预处理、检测、鉴权、熔断),结合规则引擎、语义识别与RBAC权限控制,实现全链路实时防护,保障业务合规、数据安全与服务稳定。
242 1
|
28天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
5天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
12天前
|
人工智能 编解码 物联网
2026 最新Stable Diffusion 本地部署教程 下载安装使用详细图解(含官网安装包)
Stable Diffusion(SD)是2022年发布的开源文生图模型,由Stability AI等联合开发。支持文生图、图生图、局部重绘等,依托VAE降低算力需求,可在消费级显卡运行。本文提供秋葉aaaki制作的Windows整合包(含图形界面与插件),开箱即用,零配置启动。
|
5天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
306 0
|
22天前
|
存储 人工智能 监控
QoderWork完全指南:从入门到精通,把“AI实习生”变成你的全能工作搭档
阿里云2026年推出的桌面端AI工作助手QoderWork,不止聊天,更可动手干活:本地运行、安全可控,支持文件整理、数据分析、PPT生成、网页开发等;内置专家套件、多Agent协作与自定义Skills,让AI真正成为你身边的“AI实习生”。
|
13天前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。