当前位置: 首页 > news >正文

GitLab使用示例

以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。


1. 新建分支并克隆项目

1.1 在 GitLab 上创建新分支

  1. 登录 GitLab,进入目标项目页面。
  2. 依次点击 Repository > Branches
  3. 点击右上角 New branch
    • 输入分支名称(如 feature/add-ci)。
    • 从主分支(mainmaster)创建新分支。
  4. 创建完成后,GitLab 会显示新分支。

1.2 将新分支克隆到本地

  1. 获取项目的 Git 仓库 URL。
  2. 在本地克隆项目并切换到新分支:
    git clone <git-repo-url>
    cd <project-directory>
    git checkout feature/add-ci
    

2. 在新分支中添加 GitLab CI 配置文件

2.1 创建 .gitlab-ci.yml 文件

  1. 在项目根目录下创建 .gitlab-ci.yml 文件:

    touch .gitlab-ci.yml
    
  2. 打开 .gitlab-ci.yml 文件并添加以下内容:

    stages:          # 定义流水线的阶段顺序- build- test- deploybuild_job:       # 构建阶段的作业stage: buildscript:- echo "Building the project..."- mkdir build- echo "Build successful!" > build/status.txtartifacts:paths:        # 保存构建结果以供后续作业使用- build/test_job:        # 测试阶段的作业stage: testscript:- echo "Running tests..."- echo "Tests passed!"deploy_job:      # 部署阶段的作业stage: deployscript:- echo "Deploying the application..."when: manual    # 手动触发部署
    

2.2 提交并推送配置文件

  1. 将配置文件添加到 Git:

    git add .gitlab-ci.yml
    git commit -m "Add CI configuration"
    
  2. 推送到远程分支:

    git push origin feature/add-ci
    

3. 验证 CI/CD 配置是否生效

3.1 查看 Pipeline 状态

  1. 登录 GitLab,进入项目页面。
  2. 点击左侧菜单中的 CI/CD > Pipelines
  3. 可以看到新的 Pipeline 被触发,包含以下阶段:
    • Build 阶段。
    • Test 阶段。
    • Deploy 阶段。

3.2 查看作业日志

  1. 点击 Pipeline,查看每个阶段的作业。
  2. 点击任意作业名称(如 build_job),查看其详细日志输出:
    Building the project...
    Build successful!
    

4. 修改 CI/CD 配置以支持多分支

为了在不同分支上定义不同的 CI/CD 行为,可以通过 rules 指定触发条件。

4.1 修改 .gitlab-ci.yml 文件

  1. 在文件中添加以下规则:

    stages:- build- test- deploybuild_job:stage: buildscript:- echo "Building the project..."- mkdir build- echo "Build successful!" > build/status.txtrules:           # 仅在 main 和 feature/* 分支触发- if: $CI_COMMIT_BRANCH == "main"- if: $CI_COMMIT_BRANCH =~ /feature\/.*/test_job:stage: testscript:- echo "Running tests..."rules:           # 仅在 feature/add-ci 分支触发- if: $CI_COMMIT_BRANCH == "feature/add-ci"deploy_job:stage: deployscript:- echo "Deploying the application..."when: manualrules:- if: $CI_COMMIT_BRANCH == "main"
    
  2. 提交并推送修改:

    git add .gitlab-ci.yml
    git commit -m "Add branch rules for CI"
    git push origin feature/add-ci
    

5. 合并分支并触发主分支 Pipeline

5.1 创建 Merge Request

  1. 登录 GitLab,进入项目页面。
  2. 点击 Merge Requests > New Merge Request
  3. 选择:
    • Source Branchfeature/add-ci
    • Target Branchmain
  4. 填写标题和描述,点击 Create Merge Request

5.2 合并分支

  1. 在 Merge Request 页面,确保 CI/CD 流水线成功运行。
  2. 点击 Merge 按钮,将新分支合并到主分支。
  3. 合并后,主分支的 CI/CD Pipeline 会自动触发。

6. 高阶示例:实现动态部署

6.1 添加动态环境部署

修改 .gitlab-ci.yml 文件,支持多环境动态部署:

stages:- build- test- deploybuild_job:stage: buildscript:- echo "Building the application..."- mkdir build- echo "Build successful!" > build/status.txtartifacts:paths:- build/test_job:stage: testscript:- echo "Running tests..."rules:- if: $CI_COMMIT_BRANCH =~ /feature\/.*/deploy_job:stage: deployscript:- echo "Deploying to $CI_ENVIRONMENT_NAME..."- echo "Deployment successful!"environment:name: $CI_COMMIT_BRANCH   # 使用分支名作为环境名rules:- if: $CI_COMMIT_BRANCH == "main"- if: $CI_COMMIT_BRANCH =~ /staging/

7. 验证动态部署

  1. 测试动态部署

    • 推送代码到 stagingmain 分支。
    • 查看 Pipeline 页面,确认 deploy_job 作业输出包含环境名。
    • 示例日志:
      Deploying to staging...
      Deployment successful!
      
  2. 手动触发生产部署

    • 在主分支的 Pipeline 页面,点击 deploy_jobPlay 按钮,手动触发部署。

总结

完整操作流程

  1. 创建新分支
    • 从 GitLab 页面创建新分支,并克隆到本地。
  2. 配置 CI/CD
    • 在项目根目录创建 .gitlab-ci.yml 文件,添加 CI/CD 配置。
  3. 提交和触发
    • 推送代码到远程分支,验证 Pipeline 是否成功运行。
  4. 动态控制
    • 使用 rules 配置分支或条件控制不同环境的部署。

通过以上步骤,你可以从零开始搭建 GitLab CI/CD 流水线,并支持多分支的动态部署,满足实际开发需求。

相关文章:

GitLab使用示例

以下是从 新建分支开始&#xff0c;配置 GitLab CI/CD 的完整详细流程&#xff0c;涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab&#xff0c;进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…...

uniapp echarts tooltip formation 不识别html

需求&#xff1a; echarts 的tooltip 的域名太长&#xff0c;导致超出屏幕 想要让他换行 思路一&#xff1a; 用formation自定义样式实现换行 但是&#xff1a; uniapp 生成微信小程序&#xff0c; echart种的tooltip 的formation 识别不了html &#xff0c;自定义样式没办…...

3D扫描对文博行业有哪些影响?

三维扫描技术对文博行业产生了深远的影响&#xff0c;主要体现在以下几个方面&#xff1a; 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备&#xff0c;能够捕捉到文物的每一个细节&#xff0c;包括形状、纹理、颜色等&#xff0c;从而生成逼真的3D模型。这些模…...

面试(十一)

目录 一.IO多路复用 二.为什么有IO多路复用机制? 三.IO多路复用的三种实现方式 3.1 select select 函数接口 select 使用示例 select 缺点 3.2 poll poll函数接口 poll使用示例 poll缺点 3.3 epoll epoll函数接口 epoll使用示例 epoll缺点 四. 进程和线程的区别…...

React-useState的使用

useState 是 React 提供的一个 Hook&#xff0c;允许你在函数组件中添加和管理状态&#xff08;state&#xff09;。在类组件中&#xff0c;状态管理通常是通过 this.state 和 this.setState 来实现的&#xff0c;而在函数组件中&#xff0c;useState 提供了类似的功能。 基本…...

设计模式之破环单例模式和阻止破坏

目录 1. 序列化和反序列化2. 反射 这里单例模式就不多说了 23种设计模式之单例模式 1. 序列化和反序列化 这里用饿汉式来做例子 LazySingleton import java.io.Serializable;public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…...

11.19c++面向对象+单例模式

编写如下类: class File{ FILE* fp }; 1:构造函数&#xff0c;打开一个指定的文件 2:write函数 向文件中写入数据 3&#xff1a;read函数&#xff0c;从文件中读取数据&#xff0c;以string类型返回 代码实现&#xff1a; #include <iostream>using namespace std;class…...

一文了解TensorFlow是什么

TensorFlow是一个开源的机器学习框架&#xff0c;由Google开发并维护。它提供了一个灵活且高效的环境&#xff0c;用于构建和训练各种机器学习模型。 TensorFlow的基本概念包括&#xff1a; 张量&#xff08;Tensor&#xff09;&#xff1a;TensorFlow中的核心数据结构&#x…...

如何做好一份技术文档?

打造出色技术文档的艺术 在当今技术驱动的世界中&#xff0c;技术文档扮演着至关重要的角色。它不仅是工程师和开发人员之间交流的桥梁&#xff0c;更是产品和技术成功的隐形推手。一份优秀的技术文档宛如一张精准的航海图&#xff0c;能够引导读者穿越技术的迷雾&#xff0c;…...

Linux和Ubuntu的关系

Linux和Ubuntu的关系&#xff1a; 1. Linux本身是内核&#xff0c;Ubuntu系统是基于Linux内核的操作系统。 2. Linux内核操作系统的构成&#xff1a; 内核、shell、文件系统、应用程序 -应用程序&#xff1a;文本编辑器等 -文件系统&#xff1a;文件存放在存储设备上的组织方…...

软件工程之静态建模

静态模型&#xff1a;有助于设计包、类名、属性和方法特征标记&#xff08;但不是方法体&#xff09;的定义&#xff0c;例如UML类图。 用例的关系&#xff1a; 扩展关系&#xff1a; 扩展关系允许一个用例&#xff08;可选&#xff09;扩展另一个用例&#xff08;基用例&…...

PICO VR串流调试Unity程序

在平时写Unity的VR程序的时候&#xff0c;需要调试自己写的代码&#xff0c;但是有的时候会发现场景过于复杂&#xff0c;不是HMD一体机能运行的&#xff0c;或者为了能够更方便的调试&#xff0c;不需要每次都将程序部署到眼睛里&#xff0c;这样非常浪费时间&#xff0c;对于…...

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…...

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…...

解析生成对抗网络(GAN):原理与应用

目录 一、引言 二、生成对抗网络原理 &#xff08;一&#xff09;基本架构 &#xff08;二&#xff09;训练过程 三、生成对抗网络的应用 &#xff08;一&#xff09;图像生成 无条件图像生成&#xff1a; &#xff08;二&#xff09;数据增强 &#xff08;三&#xff…...

CodeIgniter URL结构

CodeIgniter 的URL 结构设计得简洁且易于管理。通常遵循以下模式&#xff1a; http://<domain>/<index_page>/<controller>/<method>/<parameters> 下面是每个部分的详细说明&#xff1a; <domain>&#xff1a; 这是你的网站域名&#…...

从 App Search 到 Elasticsearch — 挖掘搜索的未来

作者&#xff1a;来自 Elastic Nick Chow App Search 将在 9.0 版本中停用&#xff0c;但 Elasticsearch 拥有你构建强大的 AI 搜索体验所需的一切。以下是你需要了解的内容。 生成式人工智能的最新进展正在改变用户行为&#xff0c;激励开发人员创造更具活力、更直观、更引人入…...

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤&#xff0c;主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程&#xff1a; **1.创建TCPSocketServer实例&#xff1a;**首先&#xff0c;需要导入鸿蒙…...

Qt/C++基于重力模拟的像素点水平堆叠效果

本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用&#xff0c;将随机分布的像素点下落并水平堆叠&#xff0c;同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点&#xff1a;程序在初始化时随机生成一定数量的像素点&#xff0c;每个…...

Zookeeper学习心得

本人学zookeeper时按照此文路线学的 Zookeeper学习大纲 - 似懂非懂视为不懂 - 博客园 一、Zookeeper安装 ZooKeeper 入门教程 - Java陈序员 - 博客园 Docker安装Zookeeper教程&#xff08;超详细&#xff09;_docker 安装zk-CSDN博客 二、 zookeeper的数据模型 ZooKeepe…...

嵌入式开发工程师面试题 - 2024/11/24

原文嵌入式开发工程师面试题 - 2024/11/24 转载请注明来源 1.若有以下定义语句double a[8]&#xff0c;*pa&#xff1b;int i5&#xff1b;对数组元素错误的引用是&#xff1f; A *a B a[5] C *&#xff08;p1&#xff09; D p[8] 解析&#xff1a; 在 C 或 C 语言中&am…...

Python中打印当前目录文件树的脚本

效果图&#xff1a; 实现脚本&#xff1a; 1、显示所有文件和文件夹&#xff1a; import osdef list_files(startpath, prefix):items os.listdir(startpath)items.sort()for index, item in enumerate(items):item_path os.path.join(startpath, item)is_last index le…...

全景图像(Panorama Image)向透视图像(Perspective Image)的跨视图转化(Cross-view)

一、概念讲解 全景图像到透视图像的转化是一个复杂的图像处理过程&#xff0c;它涉及到将一个360度的全景图像转换为一个具有透视效果的图像&#xff0c;这种图像更接近于人眼观察世界的方式。全景图像通常是一个矩形图像&#xff0c;它通过将球面图像映射到平面上得到&#xf…...

Redis 中的 hcan 命令耗内存,有什么优化的方式吗 ?

Redis 中的 hcan 命令耗内存&#xff0c;有什么优化的方式吗 &#xff1f; 1. 使用合适的游标值&#xff1a;2. 控制每次迭代返回的键数量&#xff1a;3. 避免长时间运行的迭代&#xff1a;4. 使用HSCAN与SCAN命令结合&#xff1a;5. 优化哈希表结构&#xff1a;6. 监控和调整R…...

豆包MarsCode算法题:三数之和问题

问题描述 思路分析 1. 排序数组 目的: 将数组 arr 按升序排序&#xff0c;这样可以方便地使用双指针找到满足条件的三元组&#xff0c;同时避免重复的三元组被重复计算。优势: 数组有序后&#xff0c;处理两个数和 target - arr[i] 的问题可以通过双指针快速找到所有可能的组…...

【Android】AnimationDrawable帧动画的实现

目录 引言 一、AnimationDrawable常用方法 1.1 导包 1.2 addFrame 1.3 setOneShot 1.4 start 1.5 stop 1.6 isRunning 二、 从xml文件获取并播放帧动画 2.1 创建XML文件 2.2 在布局文件中使用帧动画资源 三、在代码中生成并播放帧动画 3.1 addFrame加入帧动画列…...

【消息序列】详解(7):剖析回环模式--设备测试的核心利器

目录 一、概述 1.1. 本地回环模式 1.2. 远程环回模式 二、本地回环模式&#xff08;Local Loopback mode&#xff09; 2.1. 步骤 1&#xff1a;主机进入本地环回模式 2.2. 本地回环测试 2.2.1. 步骤 2a&#xff1a;主机发送HCI数据包并接收环回数据 2.2.2. 步骤 2b&…...

解决Ubuntu 22.04系统中网络Ping问题的方法

在Ubuntu 22.04系统中&#xff0c;网络问题时有发生&#xff0c;尤其是当涉及到静态IP地址配置和网线直连的两台机器时。本文将探讨一种常见问题——断开并重新连接网线后&#xff0c;尽管网卡显示为UP状态&#xff0c;但无法立即ping通对方机器&#xff0c;以及如何解决这一问…...

【大数据学习 | Spark-SQL】Spark-SQL编程

上面的是SparkSQL的API操作。 1. 将RDD转化为DataFrame对象 DataFrame&#xff1a; DataFrame是一种以RDD为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。带有schema元信息&#xff0c;即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这样的数…...

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前&#xff0c;我们都在讲什么低代码/无代码平台&#xff0c;这个概念很久了&#xff0c;但是&#xff0c;一直没有很好的落地&#xff0c;整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来&#xff0c;各大科技公司也都推出了很多 AI 代码助手&#xff…...

网站建设 招标/优化课程

3、索引与切片 3.1 一维数组 import numpy as nparr1 np.arange(10) print(原始数组,arr1) print(取单独的一个数据) print(arr1[0]) print(arr1[-1]) print(取多个数据) print(arr1[0:-1]) print(arr1[0:3:2])注意点&#xff1a; 1、取单个数据&#xff0c;取下标&#xff…...

南昌的网站设计/seo运营人士揭秘

原理Android客户端模拟一个HTTP的Post请求到服务器端&#xff0c;服务器端接收相应的Post请求后&#xff0c;返回响应信息给给客户端。背景网上很多上传到java服务器上的&#xff0c;找了好久&#xff0c;找到了上传到php的了&#xff0c;思路跟我当初想的差不多&#xff0c;就…...

可免费注册的网站/广东企业网站seo哪里好

iTEST大学外语测试与训练系统FLTRP iTEST大学外语测试与训练系统(以下简称iTEST)是为高校提供英语试题库资源和在线评测服务的综合测试管理平台。平台提供大学英语四六级考试、英语专业四八级考试、研究生英语入学考试等高质量模拟题库和基础训练题库&#xff0c;支持学生进行词…...

怎样做网站开发/网站搭建平台

开源前夕先给大家赞赏一下我用C语言开发的移动、手机、PC自己主动兼容云贴吧 - 涨知识属马超懒散,属虎太倔强.十二生肖全了!-转自云寻觅贴吧 转: 涨知识属马超懒散,属虎太倔强.十二生肖全了! -转自云寻觅贴吧 转自:http://tieba.yunxunmi.com/tieba-%25E9%25A9%25AC%25E8%25B6…...

营销型网站建设需要有什么功能/百度竞价排名服务

siwtch(config)#service timestamps debug datetime msec localtime show-timezonesiwtch(config)#service timestamps log datetime msec localtime show-timezone...

wordpress自定义栏目是什么意思/网站推广策略有哪些

列表操作&#xff1a;遍历、range()、列表解析、列表切片、列表复制、元组1. 遍历列表letters [A,B,C,D,E,F,G]for letter in letters:print(letter)输出&#xff1a;ABCDEFG记得for ...... :有冒号&#xff0c;循环内容要缩进(indent)来表示它属于当前循环。缩进约定俗成打4个…...