百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

GitLab CI/CD使用实践

liuian 2025-01-16 20:10 78 浏览

脑袋竟然抽了,要研究这个?

当我有这个想法的时候,脑袋确实抽了一下。作为传统应用开发人员,应该把自己的精力放到业务逻辑上,把完成客户需求作为第一目标。如果把精力放到这个上面,那要架构师干嘛?所以当听到架构师跟我说这番话的时候,我更加感到好奇了,就好像某水中学的孩子想努力学习以后好去大城市拱白菜一样。

所以想到这里,我毅然放下了手里繁重的工作,开始找各种文档研究这个听起来非常美的GitLab单词,我合计当我研究成功了,是不是可以和领导多要点?或者以后当个小架构师给别人挖挖坑?

1、到底什么是GitLab,我要用它干嘛?

无论咱用什么语言写代码,无论咱用什么工具写代码,最后都要把代码上传到代码库里。我最开始使用的代码管理工具是svn,后来换成了git,这些工具会把代码传到Repository。这样有个统一的库来管理代码,后续发布或维护交给其他人时也会方便很多,直接checkout或pull下来就好了。而GitLab就是一个使用git来管理仓库的系统软件。通过构建一个GitLab服务,让开发人员使用你分发的权限来写代码,最后把写好的代码部署到测试或生产环境。GitLab是所有项目开发的第一步,看来还是很重要的。万事开头难,先来部署下服务吧。

2、GitLab的部署,好像很简单

首先去官网溜溜,找到菜单里的安装菜单。

映入眼帘的是一句我看不懂的普通话?总之是让我准备的服务器要4g内存是吧?

Linux installation is quicker to install, easier to upgrade and contains features to enhance reliability not found in other methods. Install via a single package (also known as Omnibus) that bundles all the different services and tools required to run GitLab. At least 4 GB of RAM is recommended.

我弄了个虚拟机,给了4g内存,准备部署,下面是教用户怎么部署的,还分各种不同的系统,感觉好贴心啊,比老师上来就让我开发个OA打卡系统强了好多呢。

我选择CentOS7来安装,下面是安装命令:

安装依赖:

sudo yum install -y curl policycoreutils-python openssh-server perl

# Enable OpenSSH server daemon if not enabled: sudo systemctl status sshd

sudo systemctl enable sshd

sudo systemctl start sshd

# Check if opening the firewall is needed with: sudo systemctl status firewalld

sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo systemctl reload firewalld

安装邮箱:

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

安装GitLab

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee


https://gitlab.example.com 这个可以更改为ip地址并且用http协议,如果后面要改域名可以再配置dns,我是设置成
http://192.168.153.129:10220,这样我可以在本机访问到这个虚拟机的GitLab,当然要开防火墙端口,或者关闭防火墙

防火墙开端口命令:firewall-cmd --zone=public --add-port=10220/tcp --permanent

关闭防火墙命令:service firewalld stop

重启防火墙配置:firewall-cmd --reload

如果上面的url地址设置错了,可以到文件里面去修改


gitlab.rb

修改external_url 'http://192.168.153.129:10220'

安装完了,请求下看看效果,这里需要用户名和密码,GitLab提示用户名用root,密码存到一个密码文件中,第一次需要登录去复制出来。

密码位置:

/etc/gitlab/initial_root_password

先浏览下GitLab吧

可能会遇到502错误,大概率端口设置不对,我的经验是设置大端口一般没问题,10000以后的很安全,如果8080、9090、8090这种很容易就冲突了。

成功登录说明安装没问题了,成功部署了GitLab服务,第一阶段完成了,下面咱看看怎么建库吧。

3、GitLab建库,存点小代码

建个代码仓库,这里非常简单,看到按钮按一按,就创建了一个代码仓库。

New Project->Create blank project->Create project

我创建了一个mountain项目,这里配合Idea上传点代码。

这里要上传ssh密钥,不然没有代码权限。

ssh-keygen -t rsa -C your@xx.com -b 4096,可以设置自己的密码,这样会生成密钥对在本地,找到生成的公钥,把里面的字符串配置到GitLab。

在GitLab点击头像下的Preference进行设置

到这里仓库和账户权限都设置差不多了,可以通过IDEA等IDE下载代码了。是不是到此为止了?就这?

4、CI与CD是个什么?能骗个女朋友?

完成了部署与代码库搭建,好像真的不算什么,拿这个找白菜貌似差了点啥。下班后我涌进拥挤的通勤车,看着谢顶的师弟挽着撒娇的白嫩师姐,貌似想到了什么:如果下班后能有人自动把我放到通勤车,再把车里容易和我发生冲突的师弟赶出去留下我喜欢的师姐岂不是很美?开到地方了直接把我放回家,我都不用走了。如果每天都这样,我还买什么私家车啊,通勤就是我的邂逅车,爱情早晚从这里开始。所以代码是不是会和爱情一样,有人从中推波助澜呢?

所以看了看CI/CD的概念,这个东西正好在GitLab中:

CI:Continuous Integration works by pushing small code chunks to your application’s codebase hosted in a Git repository, and to every push, run a pipeline of scripts to build, test, and validate the code changes before merging them into the main branch.

CD:Continuous Delivery and Deployment consist of a step further CI, deploying your application to production at every push to the default branch of the repository.

大概就是帮助我把代码创建、测试、部署一遍。CI可以实现持续集成,把各种开发者推送的代码自动测试、构建一遍,如果有问题会提示他们改好,没有问题就提示可以合并,这样就不用靠脑袋想起来了构建一遍,再解决冲突。而CD可以实现持续部署,可以把构建好的打包发布到应用服务器,这样就不用原始的手动拷贝了,这里和Jenkins很像。

概念理解很重要,这东西就像ppt,咱不会造电动车也要明白啥是特斯拉。

5、配置CI/CD

以我的这个测试项目代码为例,点击CI/CD configuration进入配置页。

这里其实是在项目根目录下要创建一个文件,名字为.gitlab-ci.yml,这个就是ci、cd的配置文件,点击这个Browse templates可以浏览模板。我用的gradle,但是浏览了大神的文档感觉不知所以,这东西应该我复制过来,还是学一遍?好吧,学一遍吧。。

stages:按顺序执行的阶段任务标签,一般都是三个,build、test、deploy,代表了构建、测试、部署

variables:定义变量,这里我定义了三个,GRADLE_OPTS关闭daemon功能,因为模板让关的,不过开了也没事,是加速构建的一个功能。upload_path定义了我之后要上传目标应用服务器的文件地址,jar_name是自定义的jar名称。

before_script:执行下面的阶段任务之前,要执行一些操作作为前置条件。这里是添加项目相对目录的一个配置,并且创建两个文件夹,不然后面会因为找不到文件报错。

下面配置一下构建任务:

build-bootJar:任务名称,随便起

stage: build 对应阶段任务名

image: 定义使用gradle版本,这里是之前装好的

script:执行的脚本内容,这个非常重要,所有操作都在这里来写。

cache:设置缓存,不然每次都会下载依赖,非常慢

cache:key:设置缓存的文件名称,"$CI_PROJECT_NAME"这个是项目名称,GitLab内部设置的可识别变量,设置后会自动以这个来命名。

cache:paths:设置缓存位置

cache:policy:设置策略,这里pull-push是拉取和推送都要设置缓存。

artifacts:构建,生成的打包文件必须要用到这个命令来传输给下一个阶段任务,不然下面找不到文件。

only:设置master,只管master的打包,其他分支不管。

设置好任务后,可以看到CI/CD菜单中,构建的过程。每个小绿点代表的每个任务阶段。

可以点击前面这个按钮查看详情

接着可以点下面的阶段任务查看详情,比如点击这个build-bootjar

如果这个步骤显示不出日志,可能是gitlab-runner版本太低了,可以升级一下。

build任务会利用gradle把代码打包成jar包,并存起来,GitLab可以下载手工发布。

下面是测试的脚本,比较简单,获取代码时候利用gradle check检查代码

以上就是CI的配置,完成的目的是利用脚本在接收到pull或push请求后做一些构建和测试的动作,结果会显示到列表中,提示管理员是否有代码问题。到这里实现了一半的目标,下面弄一下CD的配置。

首先需要在应用服务器生成密钥对,然后把私钥内容设置到GitLab,后续远程到目标应用服务器执行命令会用到。

然后回到.gitlab-ci.yml,配置deploy-jar

when: manual 配置需要手动发布,不然每次提交master都发布一次,可能非常频繁没有必要。

before_script:发布之前,执行ssh命令添加之前提交的远程应用服务器的私钥。

script:发布脚本,非常重要,这里通过sshpass将之前build阶段产生的jar包取出传送到目标服务器。再通过命令"systemctl restart chessboard.service"重新启动远程服务。

注:systemctl restart chessboard.service 说明之前要手工部署一次,将jar包使用systemctl方式注册成服务,这样下次重启会自动启动,相当于windows的windows service。注册systemctl也很简单,可以自行百度一下。

needs:依赖的任务,指定build-bootJar必须构建完成,并且artifacts中有jar包。

配置之后执行一下,如果是两个绿点,一个发布按钮就成功了,然后点击deploy-jar发布按钮,就会发布到远程服务器。

登录到远程服务器查看是否发布成功:

敲命令看看服务是否正常:

systemctl status chessboard.service

一切顺利,看来运行的还算可以。

6、配置合并请求

下一步可以设置下存储库,把权限设置成主干只允许管理员合并与提交,分支不管。这样开发者必须在GitLab提交合并申请才行。

下面是设置权限目录

创建分支合并请求,这里可以创建多个分支合并请求,这样各种开发分支的合并请求都可以显示到这个列表中,实时查看分支的内容和状态,是否有合并冲突等。

点击进去可以查看详情,并且有提示按钮,管理员进行批准合并。

7、涨薪了?

结束了,首先没有谢顶,然后通勤车早就开走了,我没上去车。我把研究结果告诉了架构师,能高看我了吧?听说最近要涨薪了,不知道工资会不会提高点,听领导说肯定有我的份,因为看我天天加班肯定是干活呢,但是我要不要告诉他我一天净整没用的了呢?GitLab之后我想再看看Jenkins咋用,听说也是非常好的开源软件,小伙伴们咱一起再努努力赶赶车上的师姐啊?

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...