GitLab CI/CD实现代码推送后自动maven打包发布

news2024/9/21 4:40:21

1、GitLab CI/CD介绍

        CI(Continuous Intergration):即持续集成,将代码的合并、部署、自动化测试都在一起,不断地执行这个过程,并对结果反馈。

        CD(Continuous Delivery):即持续交付,持续交付是一种软件工程方法,用来保证软件可以稳定持续地保持着随时可发布的状态,与持续集成相比,持续交付偏重于可交付的产物。

        CD(Continuous Deployment):即持续部署,通过自动化的手段将软件频繁的交付,部署到相应的环境。

         整个流程如上图所示:本地提交代码到gitlab服务器上,gitlab要使用CI/CD功能的话要先安装gitlab-runner,gitlab-runner的作用是用来构建各个任务,比如:build、test、package、deploy等等的任务。因为gitlab-runner构建任务比较耗资源,因此为了不影响gitlab的正常使用,通常gitlab和gitlab-runner不是安装在同一个服务器上。而gitlab-ci是负责管理各个项目的构建状态(pending、failed、running、pass等)。

  1.         概况来说,整个gitlab ci/cd流程如下:
  2.         本地代码改动
  3.         变动代码推送到GitLab上
  4.         GitLab 将这个变动通知GitLab-CI
  5.         GitLab-CI找出这个工程相关联的gitlab-runner
  6.         gitlab-runner把代码更新到本地
  7.         根据预设置的条件配置好环境
  8.         根据预定义的脚本(一般是.gitlab-ci.yml)执行
  9.         把执行结果通知给GitLab
  10.         GitLab显示最终执行的结果

2、安装软件

        

         我在我自己的windows10电脑上装了gitlab-runner、maven、jdk、mysql。我的gitlab私服是装在了虚拟机Ubuntu里面。

        之所以在windows里面装gitlab-runner,是因为我在ubuntu虚拟机里面装了gitlab-runner在注册到gitlab私服的时候一直出现这个报错(Runner has never contacted this instance)

网上的主流解决方法是重启或者重装其他版本的gitlab-runner,这些我都试过,都不行,最后不想折腾了,于是就在windows里面装了gitlab-runner注册到gitlab私服的时候就不报这个错了!

2.1、windows安装gitlab-runner

        win10安装gitlab-runner可以参考一下这篇

windows 安装 gitlab-runner - 青S衫% - 博客园 (cnblogs.com)

        我简单概况一下:

       1、 先去gitlab官网下载windows版本的gitlab Install GitLab Runner on Windows | GitLab

       2、安装gitlab-runner

//安装gitlab-runner
.\gitlab-runner.exe install

//使用指定账户安装gitlab-runner
.\gitlab-runner.exe install --user your-username --password your-password

//启动gitlab-runner
.\gitlab-runner.exe start

//停止gitlab-runner
.\gitlab-runner.exe stop

2.2、Ubuntu安装gitlab

        Ubuntu安装gitlab可以参考一下这篇【Ubuntu安装GitLab 指南】_不完美的小小鸟的博客-CSDN博客_ubuntu安装gitlab

        我简单概况一下:

//安装需要的库和软件 
sudo apt-get install curl openssh-server ca-certificates postfix 

//添加GitLab的包并进行安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |sudo bash 
sudo apt-get install gitlab-ce 

        gitlab安装好后,默认账户为root,密码在 /etc/gitlab/initial_root_password 文件中。

        新建一个gitlab项目。

3、把gitlab-runner注册到gitlab上

        .\gitlab-runner.exe restart

        

         

        注册成功后,Runners下面会生成一个runners,可以看到这个runners是正常运行的,没有什么错误。

 CI/CD里面生成了runners后,相应的在gitlab-runner的config.toml文件里面也会生成一个新的[[runners]],对新生成的[[runners]]的配置信息做一些修改。

pre_clone_script = "chcp 65001"
pre_build_script = "chcp 65001"
shell = "powershell"

         .\gitlab-runner.exe restart   重启一下以免修改的配置不生效!

4、在Maven项目中新增.gitlab-ci.yml文件

         .gitlab-ci.yml要和pom.xml处于同一级目录下

        

.gitlab-ci.yml

# 本次构建的阶段: compile、package、deploy
stages:
  - compile
  - package
  - deploy

# 编译
compile:
  stage: compile
  tags:
    - maven
  only:
    - master
  script:
    - echo "=============== 开始编译任务  ==============="
    - mvn compile

# 打包
package:
  stage: package
  tags:
    - maven
  only:
    - master
  script:
    - echo "=============== 开始打包任务  ==============="
    - mvn clean package
    - copy D:\gitlab-runner\builds\H-iQC7zA\0\gitlab-instance-40d3d67d\erp\target\erp.jar D:\package

#启动jar包
deploy:
  stage: deploy
  tags:
    - maven
  only:
    - master
  script:
    - echo "=============== 开始部署任务  ==============="
    - java -jar D:\package\erp.jar

对.gitlab-ci.yml里面脚本的说明: 

具体.gitlab-ci.yml里面脚本的语法可以参考这篇:.gitlab-ci.yaml 编写说明,示例带注释说明_kunyus的博客-CSDN博客

5、推送代码到gitlab

        我把master分支的代码推送到gitlab上面,然后它就自动触发CI/CD的流程了! 

 

compile阶段

package阶段 

 deploy阶段

部署成功,可以访问了!

6、总结

        因为目前工作中有用到这种推送自动打包发布的模式,所以顺便就学习了。我公司用的是gitlab-ci,但我在查资料的过程有发现有其他方法也可以做到这种自动打包发布,比如使用gitee的webhooks:Docker+jenkins+gitee+springboot实现自动化部署流程(详细教程)(附下载工具地址)(1)_盖被子的冰块的博客-CSDN博客

我参考了这篇但没搞出来,碰到了这个问题,私信那位博主,但是人家一直没回我。 

 当然目前对于gitlab-ci/cd也只是了解会用的阶段,因为不太了解docker,那些dcoker的自动发布构建镜像脚本不太会写,所以这次我没有用docker,等我系统学习了docker以后再说。工作中其实也没有机会去写.gitlab-ci.yml脚本。我公司信息系统整个微服务架构是以docker镜像的方式部署在linux服务器上的k8s集群上,整个发布集成是基于gitlab-ci的。所有的dockerfile,shell脚本这些都是放在一个单独的项目上的。在每个的项目的.gitlab-ci.yml里面是直接include引入进来的。我看了下存放dockerfile,shell脚本的这个项目的提交历史,基本上比较大的修改都是三年前的了,最近一两年没什么修改最多也就改改参数这种小修改,或者把某些地方注释掉应该为了测试吧。嗯,其实对于一个系统来说,有一个好的稳定的运行开发环境是尤为重要的,对于开发团队来说有一个好的开发规范,代码规范,Git分支模式的选择,人员项目的管理。对于业务来说还得有个规范,我目前是在公司内网的系统,会涉及财务人事销售库管等这些业务。就是erp了。但感觉很多需求其实都是用户他们拍脑袋想出来的,我们开发人员更多或者只会考虑这个需求在技术上好不好实现,至于这个是不是符号规范是否合理貌似很少会去考虑,也不知道怎么考虑,毕竟用户人家一直搞相关业务,肯定比我们开发人员专业吧!在软件行业有个职位叫“咨询顾问”,他们通常某个领域业务的专家,我大二的时候曾去一家专门搞erp的公司实习过,他们给用户做系统的话,开发人员只占少数,相反顾问却很多,比如财务顾问,销售顾问,物流顾问,库管顾问,CRM顾问等等。顾问们跟据用户的需求以及实地调研的结果会提供相应模块的设计方案(业务层面),然后又开发人员去实现。他们是做sap的,因为sap本身就是一个成熟的平台了,他们开发人员是基于平台进行开发,因此有很多现有的模板可以直接拿来用的,因此就不需要那么多开发人员了。sap erp系统的重点在于解决方案!

        当然对于我来说,我不太会去走咨询顾问这条路线,之前也和前同事以及一些大学同专业同学有聊过,基本上技术的路不适合一直走,要么争取转项目管理,要么走业务路线,资深的业务其实就是咨询顾问了。其实目前我也没怎么想好以后的发展路线,目前的打算也是现在正在学习的方向就是devops方向了,关于语言框架也有一段时间没去新学习了,java8以后就没怎么再去关注过!

7、参考资料

简述gitlab-ci(入门篇) - 掘金 (juejin.cn)

DevOps案例:Gitlab CI/CD 自动化部署项目_哔哩哔哩_bilibili

 GitLab CI 打造一条自己的流水线 - 知乎

Docker安装Gitlab和Gitlab-Runner并实现项目的CICD-阿里云开发者社区

 gitlab-ci&gitlab-runner完整自动化部署过程 - 知乎

Gitlab-runner+Docker自动部署SpringBoot项目 - 咔嚓船长117 - 博客园

Ubuntu 20.04 系统5分钟后老是自动锁屏怎么取消?_传说中的暗暗的博客-CSDN博客_ubuntu关闭自动锁屏 从0开始,gitlab+gitlab-runner+springboot+docker,实现CICD流水线自动部署_木子芳兮的博客-CSDN博客

gitlab-ci - gitlab-runner : prepare environment failed to start process pwsh in windows - IT工具网

windows 安装 gitlab-runner - 青S衫% - 博客园

持续集成Gitlab-CI/CD项目MAVEN项目_无声的雾的博客-CSDN博客

【CMD】复制并覆盖目标文件_sayyy的博客-CSDN博客_cmd copy 覆盖

 Docker+jenkins+gitee+springboot实现自动化部署流程(详细教程)(附下载工具地址)(1)_盖被子的冰块的博客-CSDN博客

Docker+jenkins+gitee+springboot实现自动化部署流程(详细教程)(附下载工具地址)(2)_盖被子的冰块的博客-CSDN博客 Ubuntu 安装 jdk8 - 追梦滴小蜗牛 - 博客园 (cnblogs.com)

Ubuntu系统下文件带小锁如何解决_木可木可❀的博客-CSDN博客_ubuntu文件夹上有锁

Linux查看所有用户用什么命令 - lclc - 博客园

Ubuntu 安装Maven步骤 - xiondun - 博客园

如何在 Ubuntu 20.04 上安装 Git - 知乎

"/etc/docker/daemon.json" E212: Can't open file for writing_Coder_贾俊浩的博客-CSDN博客

Linux 退出&保存/不保存_qq_27327261的博客-CSDN博客_linux不保存退出

Docker 搭建 Jenkins 实现自动部署-阿里云开发者社区

Jenkins基础: root URL设定_淼叔的博客-CSDN博客_can only set resource root url if jenkins url is s 系列学习 Jenkins 之第 4 篇 —— 亲测成功 Jenkins + Gitee + Docker 实现自动化部署微服务项目(完结)_流放深圳的博客-CSDN博客

docker常规操作——启动、停止、重启容器实例_Michel4Liu的博客-CSDN博客_docker关闭容器

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

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

相关文章

别具一格的婚礼,VR全景+婚礼的优势展现在哪里?

随着90后、95后逐渐步入结婚的主力军中,如何策划一场别具一格的婚礼是许多年轻人所头疼的,那么今年我们就可以玩点新潮的,VR婚礼或许是个不错的选择。 VR全景婚礼就是通过全景摄像机对婚礼进行记录,不但可以帮助新人捕捉婚礼的精彩…

对S参数的理解II

本篇文章特别感谢粉丝朋友“千年的呢喃”,他给我推荐了一本书,写的非常好 Micro Wave and RF Design,有需要的朋友自行下载。 之前关于S参数也写过几篇文章了,但一直以来都有一个历史遗漏问题没有解决,那就是&#xf…

ElasticSearch-学习笔记05【SpringDataElasticSearch】

Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…

【IVIF的超分重建】

Multimodal super-resolution reconstruction of infrared and visible images via deep learning (基于深度学习的红外和可见光图像多模态超分辨率重建) 提出了一种基于编解码器结构的红外-可见光图像融合方法。图像融合任务被重新表述为保持红外-可见…

2023年3月AMA-CDGA/CDGP数据治理认证考试这些城市可以报名

目前2023年3月5日CDGA&CDGP开放报名的城市有:北京、上海、广州、深圳、杭州、重庆,西安,成都,长沙,济南,更多考场正在增加中… DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业…

Echarts 设置折线图线条样式(虚线+粗细+阴影)

第012个点击查看专栏目录Echarts折线图的lineStyle属性可以设置折线的颜色,粗细,类型,线段末端类型,阴影,透明度,偏移等属性。文章目录示例效果示例源代码(共128行)相关资料参考专栏…

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程

文章目录前言线程创建1.继承Thread类重写run()方法如何查看程序中的线程?2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runnable5.⭐使用Lambda表达式,创建线程(重要)Thread 的常见构造方法总结前言 在这里主要补充说明一些问题,方便更好地理解下面的…

conda安装nodejs版本过低解决方法

conda命令直接安装nodejs时,可能会由于镜像源中nodejs版本过低导致没法安装高本版的nodejs,导致无法jupyterlab使用一些扩展插件。 解决方法如下:(windows环境下直接按提示下载版本安装就行,此处只介绍linux环境的解决…

2023上半年软考中级系统集成项目管理工程师2月25日开班

系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职…

今天面试招了个28K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在20~30k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…

2023年上半年软考高项信息系统项目管理师2月25日开班

信息系统项目管理师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资…

每天一道大厂SQL题【Day09】充值日志SQL实战

每天一道大厂SQL题【Day09】充值日志SQL实战 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&#…

MMDetection(五)

目标检测工具包 MMDetection MMDetection 可以做什么 ➢ MMDetection 提供 400 余个性能优良的预训练模型,开箱即 用,几行 Python API 即可调用强大的检测能力 ➢ MMDetection 涵盖 60 余个目标检测算法,并提供方便易用的 工具,…

【Spring Cloud】如何修改Feign的日志记录级别

本期目录前言1. 介绍2. 方式一:配置文件1)全局生效2)局部生效3. 方式二:Java代码1)全局配置2)局部配置前言 本次示例代码的文件结构如下图所示。 1. 介绍 Feign 允许我们自定义配置,下面是 …

kubernetes集群部署springcloud项目【AL】【未写完】

kubernetes集群部署springcloud项目【AL】 (先手工做,非自动化) #环境: 192.168.73.138 master 192.168.73.139 node1 192.168.73.140 node2 192.168.73.137 harbor、mysqlgit clone https://github.com/lizhenliang/simple-…

leetcode.1234 替换子串得到平衡字符串 - 反向滑动窗口

1234. 替换子串得到平衡字符串 题目: 有一个只含有 Q, W, E, R 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,请通过「替换…

信息安全管理

信息安全管理信息安全管理信息安全风险管理信息安全管理体系应急响应与灾难恢复应急响应概况信息系统灾难修复灾难恢复相关技术信息安全管理 管理概念:组织、协调、控制的活动,核心过程的管理控制 管理对象和组成:包括人员在内相关资产&…

【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件

在ArcGIS Pro工作中,有时候会涉及到工具栏UI的管理,比如,打开模型构建器时,工具栏才会出现新的选项卡(Tab)【ModelBuilder】,工程未做更改,则【保存】按钮显示灰色不可用。 下面以一个小例子来学习一下。 一…

VScode+cuda编程:常见环境问题

VScodecuda:常见环境配置问题1、VScode终端问题(PS)2、编译问题(CUDA版本过低)3、nvcc编译问题(arch架构)1、VScode终端问题(PS) 问题描述: 在VScode下打开终端执行nvcc指令,发现执行不了,但是在外部终端powershell和cmd都可以。…

波奇学c语言:代码的编译和链接

test.c(源文件)->编译->test.obj(目标文件)->链接->test.exe(可执行文件)编译1.预编译(预处理):text.c->text.i使用gcc -E test.c 进行停止预处理指令&am…