GitLab使用示例
以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。
1. 新建分支并克隆项目
1.1 在 GitLab 上创建新分支
- 登录 GitLab,进入目标项目页面。
- 依次点击 Repository > Branches。
- 点击右上角 New branch:
- 输入分支名称(如
feature/add-ci
)。 - 从主分支(
main
或master
)创建新分支。
- 输入分支名称(如
- 创建完成后,GitLab 会显示新分支。
1.2 将新分支克隆到本地
- 获取项目的 Git 仓库 URL。
- 在本地克隆项目并切换到新分支:
git clone <git-repo-url> cd <project-directory> git checkout feature/add-ci
2. 在新分支中添加 GitLab CI 配置文件
2.1 创建 .gitlab-ci.yml
文件
-
在项目根目录下创建
.gitlab-ci.yml
文件:touch .gitlab-ci.yml
-
打开
.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 提交并推送配置文件
-
将配置文件添加到 Git:
git add .gitlab-ci.yml git commit -m "Add CI configuration"
-
推送到远程分支:
git push origin feature/add-ci
3. 验证 CI/CD 配置是否生效
3.1 查看 Pipeline 状态
- 登录 GitLab,进入项目页面。
- 点击左侧菜单中的 CI/CD > Pipelines。
- 可以看到新的 Pipeline 被触发,包含以下阶段:
- Build 阶段。
- Test 阶段。
- Deploy 阶段。
3.2 查看作业日志
- 点击 Pipeline,查看每个阶段的作业。
- 点击任意作业名称(如
build_job
),查看其详细日志输出:Building the project... Build successful!
4. 修改 CI/CD 配置以支持多分支
为了在不同分支上定义不同的 CI/CD 行为,可以通过 rules
指定触发条件。
4.1 修改 .gitlab-ci.yml
文件
-
在文件中添加以下规则:
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"
-
提交并推送修改:
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
- 登录 GitLab,进入项目页面。
- 点击 Merge Requests > New Merge Request。
- 选择:
- Source Branch:
feature/add-ci
- Target Branch:
main
- Source Branch:
- 填写标题和描述,点击 Create Merge Request。
5.2 合并分支
- 在 Merge Request 页面,确保 CI/CD 流水线成功运行。
- 点击 Merge 按钮,将新分支合并到主分支。
- 合并后,主分支的 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. 验证动态部署
-
测试动态部署:
- 推送代码到
staging
或main
分支。 - 查看 Pipeline 页面,确认
deploy_job
作业输出包含环境名。 - 示例日志:
Deploying to staging... Deployment successful!
- 推送代码到
-
手动触发生产部署:
- 在主分支的 Pipeline 页面,点击
deploy_job
的 Play 按钮,手动触发部署。
- 在主分支的 Pipeline 页面,点击
总结
完整操作流程
- 创建新分支:
- 从 GitLab 页面创建新分支,并克隆到本地。
- 配置 CI/CD:
- 在项目根目录创建
.gitlab-ci.yml
文件,添加 CI/CD 配置。
- 在项目根目录创建
- 提交和触发:
- 推送代码到远程分支,验证 Pipeline 是否成功运行。
- 动态控制:
- 使用
rules
配置分支或条件控制不同环境的部署。
- 使用
通过以上步骤,你可以从零开始搭建 GitLab CI/CD 流水线,并支持多分支的动态部署,满足实际开发需求。
相关文章:
GitLab使用示例
以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab,进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…...
uniapp echarts tooltip formation 不识别html
需求: echarts 的tooltip 的域名太长,导致超出屏幕 想要让他换行 思路一: 用formation自定义样式实现换行 但是: uniapp 生成微信小程序, echart种的tooltip 的formation 识别不了html ,自定义样式没办…...
3D扫描对文博行业有哪些影响?
三维扫描技术对文博行业产生了深远的影响,主要体现在以下几个方面: 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备,能够捕捉到文物的每一个细节,包括形状、纹理、颜色等,从而生成逼真的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,允许你在函数组件中添加和管理状态(state)。在类组件中,状态管理通常是通过 this.state 和 this.setState 来实现的,而在函数组件中,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:构造函数,打开一个指定的文件 2:write函数 向文件中写入数据 3:read函数,从文件中读取数据,以string类型返回 代码实现: #include <iostream>using namespace std;class…...
一文了解TensorFlow是什么
TensorFlow是一个开源的机器学习框架,由Google开发并维护。它提供了一个灵活且高效的环境,用于构建和训练各种机器学习模型。 TensorFlow的基本概念包括: 张量(Tensor):TensorFlow中的核心数据结构&#x…...
如何做好一份技术文档?
打造出色技术文档的艺术 在当今技术驱动的世界中,技术文档扮演着至关重要的角色。它不仅是工程师和开发人员之间交流的桥梁,更是产品和技术成功的隐形推手。一份优秀的技术文档宛如一张精准的航海图,能够引导读者穿越技术的迷雾,…...
Linux和Ubuntu的关系
Linux和Ubuntu的关系: 1. Linux本身是内核,Ubuntu系统是基于Linux内核的操作系统。 2. Linux内核操作系统的构成: 内核、shell、文件系统、应用程序 -应用程序:文本编辑器等 -文件系统:文件存放在存储设备上的组织方…...
软件工程之静态建模
静态模型:有助于设计包、类名、属性和方法特征标记(但不是方法体)的定义,例如UML类图。 用例的关系: 扩展关系: 扩展关系允许一个用例(可选)扩展另一个用例(基用例&…...
PICO VR串流调试Unity程序
在平时写Unity的VR程序的时候,需要调试自己写的代码,但是有的时候会发现场景过于复杂,不是HMD一体机能运行的,或者为了能够更方便的调试,不需要每次都将程序部署到眼睛里,这样非常浪费时间,对于…...
自媒体图文视频自动生成软件|03| 页面和结构介绍
代码获取方式在文本末尾🔚 *代码获取方式在文本末尾🔚 *代码获取方式在文本末尾🔚 *代码获取方式在文本末尾🔚 视频图片生成器 一个基于 Python 和 Web 的工具,用于生成带有文字和语音的视频以及图片。支持多种尺寸、…...
深入浅出摸透AIGC文生图产品SD(Stable Diffusion)
hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…...
解析生成对抗网络(GAN):原理与应用
目录 一、引言 二、生成对抗网络原理 (一)基本架构 (二)训练过程 三、生成对抗网络的应用 (一)图像生成 无条件图像生成: (二)数据增强 (三ÿ…...
CodeIgniter URL结构
CodeIgniter 的URL 结构设计得简洁且易于管理。通常遵循以下模式: http://<domain>/<index_page>/<controller>/<method>/<parameters> 下面是每个部分的详细说明: <domain>: 这是你的网站域名&#…...
从 App Search 到 Elasticsearch — 挖掘搜索的未来
作者:来自 Elastic Nick Chow App Search 将在 9.0 版本中停用,但 Elasticsearch 拥有你构建强大的 AI 搜索体验所需的一切。以下是你需要了解的内容。 生成式人工智能的最新进展正在改变用户行为,激励开发人员创造更具活力、更直观、更引人入…...
鸿蒙本地模拟器 模拟TCP服务端的过程
鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤,主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程: **1.创建TCPSocketServer实例:**首先,需要导入鸿蒙…...
Qt/C++基于重力模拟的像素点水平堆叠效果
本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用,将随机分布的像素点下落并水平堆叠,同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点:程序在初始化时随机生成一定数量的像素点,每个…...
Zookeeper学习心得
本人学zookeeper时按照此文路线学的 Zookeeper学习大纲 - 似懂非懂视为不懂 - 博客园 一、Zookeeper安装 ZooKeeper 入门教程 - Java陈序员 - 博客园 Docker安装Zookeeper教程(超详细)_docker 安装zk-CSDN博客 二、 zookeeper的数据模型 ZooKeepe…...
嵌入式开发工程师面试题 - 2024/11/24
原文嵌入式开发工程师面试题 - 2024/11/24 转载请注明来源 1.若有以下定义语句double a[8],*pa;int i5;对数组元素错误的引用是? A *a B a[5] C *(p1) D p[8] 解析: 在 C 或 C 语言中&am…...
Python中打印当前目录文件树的脚本
效果图: 实现脚本: 1、显示所有文件和文件夹: 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)
一、概念讲解 全景图像到透视图像的转化是一个复杂的图像处理过程,它涉及到将一个360度的全景图像转换为一个具有透视效果的图像,这种图像更接近于人眼观察世界的方式。全景图像通常是一个矩形图像,它通过将球面图像映射到平面上得到…...
Redis 中的 hcan 命令耗内存,有什么优化的方式吗 ?
Redis 中的 hcan 命令耗内存,有什么优化的方式吗 ? 1. 使用合适的游标值:2. 控制每次迭代返回的键数量:3. 避免长时间运行的迭代:4. 使用HSCAN与SCAN命令结合:5. 优化哈希表结构:6. 监控和调整R…...
豆包MarsCode算法题:三数之和问题
问题描述 思路分析 1. 排序数组 目的: 将数组 arr 按升序排序,这样可以方便地使用双指针找到满足条件的三元组,同时避免重复的三元组被重复计算。优势: 数组有序后,处理两个数和 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. 远程环回模式 二、本地回环模式(Local Loopback mode) 2.1. 步骤 1:主机进入本地环回模式 2.2. 本地回环测试 2.2.1. 步骤 2a:主机发送HCI数据包并接收环回数据 2.2.2. 步骤 2b&…...
解决Ubuntu 22.04系统中网络Ping问题的方法
在Ubuntu 22.04系统中,网络问题时有发生,尤其是当涉及到静态IP地址配置和网线直连的两台机器时。本文将探讨一种常见问题——断开并重新连接网线后,尽管网卡显示为UP状态,但无法立即ping通对方机器,以及如何解决这一问…...
【大数据学习 | Spark-SQL】Spark-SQL编程
上面的是SparkSQL的API操作。 1. 将RDD转化为DataFrame对象 DataFrame: DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这样的数…...
15分钟做完一个小程序,腾讯这个工具有点东西
我记得很久之前,我们都在讲什么低代码/无代码平台,这个概念很久了,但是,一直没有很好的落地,整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来,各大科技公司也都推出了很多 AI 代码助手ÿ…...
网站建设 招标/优化课程
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])注意点: 1、取单个数据,取下标ÿ…...
南昌的网站设计/seo运营人士揭秘
原理Android客户端模拟一个HTTP的Post请求到服务器端,服务器端接收相应的Post请求后,返回响应信息给给客户端。背景网上很多上传到java服务器上的,找了好久,找到了上传到php的了,思路跟我当初想的差不多,就…...
可免费注册的网站/广东企业网站seo哪里好
iTEST大学外语测试与训练系统FLTRP iTEST大学外语测试与训练系统(以下简称iTEST)是为高校提供英语试题库资源和在线评测服务的综合测试管理平台。平台提供大学英语四六级考试、英语专业四八级考试、研究生英语入学考试等高质量模拟题库和基础训练题库,支持学生进行词…...
怎样做网站开发/网站搭建平台
开源前夕先给大家赞赏一下我用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自定义栏目是什么意思/网站推广策略有哪些
列表操作:遍历、range()、列表解析、列表切片、列表复制、元组1. 遍历列表letters [A,B,C,D,E,F,G]for letter in letters:print(letter)输出:ABCDEFG记得for ...... :有冒号,循环内容要缩进(indent)来表示它属于当前循环。缩进约定俗成打4个…...