从0到1搭建属于自己的Gitlab CI/CD平台

news2024/11/29 16:29:22

文章目录

      • 持续集成(CI)
      • 持续交付(CD)
      • Gitlab CI/CD功能和架构
      • 本地搭建GitLab CI/CD平台

MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握!
CI和CD是软件开发中常用的缩写,分别代表持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)。它们是实现高效软件交付流程的关键概念,Gitlab CI/CD是目前市场上应用最广泛的CI/CD平台之一。

在部署Gitlab CI/CD之前,我们再回复一下这两个概念,加深理解。

持续集成(CI)

持续集成是一种开发实践,旨在通过频繁地集成代码变更到共享的主干分支,确保团队成员的代码能够持续地、快速地集成到共同的代码仓库中。主要特点包括:

  • 频繁提交代码变更:开发人员将代码变更提交到版本控制系统,通常是多次提交而不是长时间的开发周期。
  • 自动化构建和测试:提交代码后,自动进行构建和运行各种测试,包括单元测试、集成测试等。
  • 快速反馈:及早发现和解决代码集成问题,通过自动化测试和即时反馈提高代码质量。
  • 集成检查和冲突解决:团队成员将代码合并到主干分支之前,确保代码的一致性和避免冲突。

持续交付(CD)

持续交付和持续部署是在持续集成基础上的进一步自动化,旨在快速、可靠地将软件交付给用户或部署到生产环境。主要特点包括:

  • 自动化构建、测试和部署:在代码通过持续集成流程后,自动进行构建、自动化测试并将软件包部署到目标环境。
  • 灵活的部署策略:可以根据需求选择自动化部署或手动触发部署,并支持多个部署环境,如开发、测试和生产环境。
  • 自动化回滚:在部署过程中,如果出现问题,可以自动回滚到上一个可靠的版本。
  • 可重复和可靠的发布过程:通过自动化脚本和工具确保发布过程的一致性和可重复性,减少人为错误。

总体而言,持续集成和持续交付/持续部署旨在改善软件开发流程,促进团队协作、提高代码质量,并实现快速、可靠的软件交付。持续集成确保开发人员的代码及时集成到主干分支,而持续交付/持续部署则进一步自动化了构建、测试和部署过程,以实现快速、可靠的交付流程,确保软件能够迅速地交付给用户或部署到生产环境。通过持续集成和持续交付/持续部署,团队能够更好地应对市场需求变化、快速迭代和交付高质量的软件。

在持续集成和持续交付/持续部署的流程中,借助自动化工具和技术,例如持续集成服务器(如GitLab CI/CD)、自动化构建工具(如Maven、Gradle)、自动化测试框架和自动化部署工具等,能够达成以下目标:

  1. 更快的交付周期:快速地构建、测试和部署应用程序,缩短交付周期,迅速响应用户需求。
  2. 提高软件质量:持续集成通过频繁集成和自动化测试,及时发现和解决问题,减少集成错误,降低人为错误,确保交付的软件质量。
  3. 降低风险:通过自动化的构建、测试和部署过程,减少人为操作的风险,确保每次交付都是可靠和可重复的。
  4. 加强团队协作:鼓励团队成员频繁提交代码变更和集成,加强团队协作和沟通,促进问题的早期发现和解决。
  5. 快速回滚和发布修复:使团队能够快速回滚到上一个稳定版本或发布修复版本,降低问题的影响范围和修复时间。

综上所述,持续集成和持续交付/持续部署是现代软件开发流程中的重要环节,通过自动化和频繁交付的方式,提高软件质量、加快交付速度,并增强团队协作和灵活性,使得软件开发团队能够更加高效地交付高质量的软件。

Gitlab CI/CD功能和架构

GitLab CI/CD是GitLab提供的一套持续集成和持续交付工具,可以自动化执行应用程序的构建、测试和部署。它采用了基于YAML的配置文件来定义CI/CD流程,并结合GitLab的版本控制功能,实现了代码与构建、测试、部署等环节的紧密集成,具体而言,可以实现:

  1. 自动化构建:GitLab CI/CD可以根据开发人员提交的代码自动触发构建过程,生成可部署的应用程序包。
  2. 自动化测试:支持各种类型的测试,包括单元测试、集成测试和端到端测试等,以确保应用程序的质量。
  3. 自动化部署:可以将构建好的应用程序包自动部署到不同的环境,如开发、测试和生产环境。
  4. 可视化面板:提供了直观的界面来查看CI/CD流水线的状态和结果,方便开发团队进行监控和管理。

要掌握Gitlab CI/CD,需要先来了解一下一些关键概念

  1. GitLab服务器:作为版本控制系统和CI/CD的核心,存储代码仓库和管理CI/CD流程。
  2. **Runner:**是一个独立的工作单元,负责执行CI/CD流程中的任务。可以有多个Runner,并且可以分布在不同的机器上。
  3. **Pipeline:**由一系列的Stage和Job组成,表示整个CI/CD流程。每个Stage包含一个或多个Job,按顺序执行。
  4. **Job:**表示CI/CD流程中的一个任务,可以是构建、测试或部署等操作。
  5. **Artifact:**表示CI/CD流程生成的产物,如构建生成的应用程序包或测试报告等。

本地搭建GitLab CI/CD平台

这里以本地搭建一个Gitlab CI/CD平台,实现一个Spring Boot应用CICD为例演示整个流程。

安装和配置GitLab

下载并安装GitLab服务器。可以从GitLab官方网站下载适用于您操作系统的安装包,并按照官方文档提供的指引进行安装,支持多种安装方式,最方便的安装方式是通过Docker安装。

以Docker Engine安装为例,首先配置GITLAB_HOME

export GITLAB_HOME=/srv/gitlab

如果你是在BASH下,可以将以上配置放到~/.bash_profile文件中,使用source ~/.bash_profile使其永久生效。

使用Docker Engine安装启动Gitlab

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  --shm-size 256m \
  gitlab/gitlab-ee:latest

配置好域名解析,这里是gitlab.example.com,也可以直接使用对应的IP进行访问,端口是80。

默认用户是root,其密码可以通过以下命令获得:

sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

特别注意有一些操作系统是不支持的,主要是Arch Linux、Fedora、FreeBSD、Gentoo和macos。

创建GitLab Runner

安装并配置GitLab Runner。可以根据官方文档提供的指引下载和安装适用于您操作系统的Runner。

同样支持多种安装方式,如果使用docker安装可以采用如下命令,这里采用的是本地磁盘启动的方式。

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

注册Runner与GitLab服务器的连接。执行以下命令,在注册过程中按照提示输入GitLab服务器的URL和Token:

$ sudo gitlab-runner register

在以上过程中,如果涉及查询日志的话,可以采用以下命令

$ docker logs gitlab-runner

以下是gitlab runner的执行流程图,简洁清晰展示了runner的执行过程

创建Spring Boot应用

使用Spring Initializr或其他方式创建一个简单的Spring Boot应用程序,并进行代码提交到GitLab服务器上,这里比较简单就不展开了。

创建CI/CD配置文件

在Spring Boot应用程序的根目录下创建一个名为.gitlab-ci.yml

的文件,用于定义CI/CD流程。示例配置如下:

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - mvn clean package

test:
  stage: test
  script:
    - mvn test

deploy:
  stage: deploy
  script:
    - mvn deploy

提交并触发CI/CD流程

将文件提交到GitLab服务器上:

$ git add .gitlab-ci.yml
$ git commit -m "Add CI/CD configuration"
$ git push origin master

提交代码后,GitLab会自动触发CI/CD流程,根据配置文件执行构建、测试和部署操作。

监控和管理CI/CD流水线

在GitLab网站上打开项目的页面,进入CI/CD流水线界面,可以查看每个阶段的执行情况和日志输出。

如果流水线中的某个阶段失败,可以通过查看日志和调试信息来定位和修复问题。

通过上述步骤和操作命令,就可以在本地搭建GitLab CI/CD平台,并实现Spring Boot应用的持续集成和持续交付。根据实际需求,还可以在CI/CD配置文件中添加更多的阶段和任务,以适应项目的特定需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】 HTFramework框架(四十五)【进阶篇】指令系统-自定义指令

更新日期:2023年6月19日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 指令系统1.使用指令系统2.自定义指令1.新建类 MyInstruction2.标记 CustomInstruction 特性3.编写指令的逻辑4.执行自定义指令5.自定义指令的参数6.结尾 …

C进阶 - 数组和指针

Declare an array manually VS malloc or calloc an array 用英文是因为有些东西得用他们的语言才能表达不失真 栈和堆 In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a …

学习HCIP的day.14

目录 STP生成树协议 生成树协议 一、802.1D 1、根网桥 2、根端口 3、指定端口 4、非指定端口 5、接口状态 802.1D的收敛时间 802.1D算法的缺点 以上cost值的解释 二、PVST 三、PVST 四、快速生成树 五、MSTP/MST/802.1S STP生成树协议 网络三层架构…

南京企业所得税高怎么办?

南京企业所得税高怎么办? 《税筹顾问》专注于园区招商,您的贴身节税小能手,合理合规节税! 众所周知,企业所得税是按利润来计算的,按照不同的利润阶梯计算适用的税率也会有所不同,那么当企业利润…

launch文件的编写及ROS配置文件的详细介绍

launch文件的编写及ROS配置文件的详细介绍 1 launch文件介绍及简单应用1.1 launch文件介绍1.2 launch文件简单应用 2 package.xml文件介绍及配置3 CMakeLists.txt文件介绍及配置 1 launch文件介绍及简单应用 1.1 launch文件介绍 根据ROS的架构和通信机制来看,ROS的…

讯飞星火大模型详细内测体验:它能否应对这些挑战?

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣语言理解2️⃣知识问答3️⃣逻辑推…

Vue中如何进行文件转换与格式转换

Vue中如何进行文件转换与格式转换 在Web应用程序中,经常需要进行文件转换和格式转换。例如,将PDF文件转换为图像文件、将音频文件转换为不同的格式或将视频文件转换为不同的分辨率和编解码格式。Vue作为一种流行的前端框架,提供了许多实用工…

网络管理与维护(二)网络用户设置管理

网络用户设置管理 2.1 用户帐户安全管理 用户账户的分类 管理员帐户。拥有管理本台计算机的所有权限和权利。系统内置的Administrator用户帐户 和Administrators组帐户的成员就属于管理员帐户 标准帐户。通常分配给最终用户使用,适用于日常工作,对操作…

GeoServer中地图可视化提升利器之SLD知识简介

目录 前言 一、SLD简介 1、介绍 2、SLD的版本 3、SLD的Schema说明 二、SLD中相关知识解析 1、Scheme简要说明 2、一个SLD实例 总结 前言 在互联网上有很多精美的地图,在地图从shp或者gdb等矢量文件,经过设计人员的加工,配色&#xff0…

【论文阅读】Graph-less Collaborative Filtering

【论文阅读】Graph-less Collaborative Filtering 文章目录 【论文阅读】Graph-less Collaborative Filtering1. 来源2. 介绍3. 模型解读3.1 协同过滤3.2 模型3.2.1 对比知识精馏 3.2.2 自适应对比正则化3.2.3 SimRec的参数学习 4. 实验5. 总结 1. 来源 2023WWW CCFA原文地址co…

【Linux】linux | 服务响应慢、问题排查 | 带宽问题导致 | 网速

一、说明 1、项目使用云服务器,服务器配置:5M带宽、4核、32G,1T,CentOS7 2、CPU、内存、磁盘IO都没有达到瓶颈,猜测是带宽问题 3、应用比较多,应用中间件,十几个差不多 4、同时在线人数30 5、已…

“暗网议会”如今已成为现实

图片来源:Marcin Balcerzak 最近,“暗网议会”已经成为了网络犯罪分子试图证明自己影响力的最新流行语,安全内部人士对这个词也很感兴趣。 上周五,臭名昭著的亲俄黑客组织Killnet在其电报威胁帖子中使用了这个词语。随后,twitte…

d2l_第五章学习_Multilayer Perceptrons多层感知机

x.1 Hidden Layers 线性模型的基本假设是单调,即任何特征的增大都会导致模型的输出增大(权重正时,负值时亦)。但是现实中很多的关系并不仅仅是简单的线性关系,这个时候就需要引入非线性关系,而非线性关系由…

Verilog基础之七、译码器实现

目录 一、前言 二、工程实现 2.1 工程代码 2.2 仿真结果 2.3 参考 一、前言 ​译码器的实现为编码器的逆过程,以3-8译码器为例,真值表如下。 二、工程实现 ​实现同时使用for循环和case两种方式。 2.1 工程代码 module Decoder(in,out,out_case )…

【菜单折叠效果】这菜单效果千万别让领导看了,一不小心就升职加薪(附源码)

【写在前面】 上周想着冲一波粉丝量(周冲700),但是事与愿违,没办法我只能不断的督促自己多分享,多总结了,那么今天晚上我就好好整理了一篇常见后台管理系统的菜单收缩动态效果,主要是用于后台管…

基于深度学习的高精度打电话检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度打电话检测识别系统可用于日常生活中或野外来检测与定位打电话目标,利用深度学习算法可实现图片、视频、摄像头等方式的打电话目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

Web3通过ganache运行起一个本地虚拟区块链

通过文章 Web3开发准备工作 手把手带你创建自己的 MetaMask 账号大家简单的对网络 有了个比较模糊的概念 不同的网络连接这不同的区块链 那么 我们就要搞清楚 我们切换不同的网络 我们的数字资产是不一样的 在这里 我们需要先安装一个插件工具 ganache 我们先在本地创建一个文…

大学面试三分钟自我介绍七篇

大学面试三分钟自我介绍篇1 尊敬的领导: 您好! 首先对占用您的宝贵时间深表歉意。我叫__,是一名于__年7月毕业的全日制本科大学生。所学专业:中文系汉语言文学。 经过长期努力拼搏,今天我怀着满腔热血站在了人生的又一个起点。在这…

VMware14虚拟机安装Ubuntu16.04 LTS

VMware14虚拟机安装Ubuntu16.04 LTS 一、基本介绍二、vmware下安装ubuntu系统2.1 下载ubuntu客户端镜像2.2 安装及配置2.2.1 安装2.2.2 配置 三、ubuntu系统使用 回到目录   回到末尾 一、基本介绍 对于ubuntu而言,就是linux操作系统的具体,而linux对…