基于gitlab的CICD实践
⽂章⽬录
前⾔
    gitlab,我相信⼤家⼀定不会陌⽣。现在⼤部分公司的代码托管已经从svn迁移到git上了。⽽gitlab⼜是使⽤最多的git项⽬托管平台。其实gitlab不仅仅只是⽤来做代码托管,他⾃带的CI/CD在持续集成,持续交付,持续部署⽅⾯也都有不俗的能⼒,甚⾄还可以作为docker 镜像仓库来存储⾃⼰构建的镜像。下⾯我们就来⼀步⼀步的看下,怎么使⽤他。
这⾥我们以springboot项⽬为例
⼀、可以解决什么问题?
    在我们项⽬中经常会这样的问题,测试⼈员提出⼀个bug,开发⼈员修改bug,修改完了,要重新提交代码,编译打包,发布部署服务。这⼀整套下来,好多⾏命令,好⼏分钟过去了,即使你写个shell脚本,那也要⼿动去触发执⾏。如果系统少还好,如果你有⼏⼗个系统,那运维⼈员或者测试⼈员⼀整天别的事都不要⼲了。
    那能不能有⼀个套⼯具或软件,能够每次我push代码或merge代码的时候⾃动触发构建,编译,打包,部署呢?当然⽬前jekenis⾃动打包构建很流⾏,但是,本⽂我们只讨论gitlab,那我们就来看看,gitlab怎么去帮我们完成这⼀系列的事情的。
⼆、gitlab-runner介绍
    因为我们项⽬中代码托管的是在gitlab,正好gitlab-runner为我们提供了持续集成,的功能可以和gitlab⽆缝对接。
    gitlab-runner能为我们带来什么功能
1. 持续集成(CI)。每次代码推送到gitlab仓库,都会触发代码构建,编译,测试,打包等操作
2. 持续部署(CD)。每次构建完成,可以直接将新代码部署到服务器。
我们来看下,gitlab的⼀个构建过程
⼤致流程:
    ①、 开发者推送⾃⼰代码到gitlab苍鹭
    ②、 gitlab发现项⽬根⽬录下有.l并且有指定的runner来运⾏,那就会触发构建⼯作(按照.l⾥⾯的脚本进⾏构建)。可以直接打成jar包,然后把jar包传到远端服务器运⾏,也可以在runner⾥⾯构建docker镜像,然后把镜像推送到仓库,然后到远端服务器上pull镜像运⾏。
    ③、 使⽤shell脚本或者利⽤k8s来部署我们应⽤程序。
三、安装前的准备
好,下⾯我们就来⼀步⼀步的搭建我们的服务器。
⾸先准备最少三台虚拟机:(⽬前系统都为centos7 64位系统)
    1、192.168.136.132(gitlab服务器)
    2、192.168.136.131(gitlab-runner服务器)
    3、192.168.136.130(应⽤服务器)
这⾥gitlab与gitlab-runner最好分开
应⽤服务器是可以任意多少台
gitlab服务我们是有docker安装
gitlab-runner使⽤yum安装(也可以使⽤docker安装,但是最后运⾏时遇到远程免密码执⾏脚本问题,暂时还没有到解决⽅案)四、安装gitlab(192.168.136.132)
    我们这⾥使⽤docker安装gitlab,⼀键安装,⾮常快捷。
1. 安装docker。docker安装就不在这⾥细说了,⽹上搜索有⼀⼤堆
2. 安装gitlab(建议使⽤阿⾥云镜像加速,不然下载镜像会很慢,⽽且经常会失败)
安装Gitlab:
docker run \
-itd  \
-e TZ="Asia/Shanghai" \
-p 80:80 \
-p 9922:22 \
-p 4567:4567 \
-v /opt/gitlab/etc:/etc/gitlab  \
-
v /opt/gitlab/log:/var/log/gitlab \
-v /opt/gitlab/opt:/var/opt/gitlab \
--restart always \
--privileged=true \
--name gitlab \
gitlab/gitlab-ce
1、gitlab访问使⽤80端⼝,把宿主机的80端⼝映射到gitlab容器中
2、避免与宿主机的22端⼝冲突,这⾥把宿主机的9922端⼝映射到容器中
3、4567端⼝是我们使⽤gitlab来作为我们的镜像仓库,如果你使⽤其他做经常仓库,那这个端⼝可以不要映射
4、三条映射⽬录是把容器⾥⾯的配置⽂件,gitlab存储数据,⽇志等信息映射到宿主机上。以防⽌容器重启或销毁后数据丢失
5、后⾯就是制定随docker⼀起启动,获取宿主的root权限,容器名称,镜像名称
好,这样gitlab就安装好了。下⾯我们来修改下配置⽂件。因为我们已经把gitlab的配置⽂件⽬录映射到宿主机了,那么就直接在宿主机上修改
vi /opt/gitlab/etc/gitlab.rb
直接在这个⽂件⾥⾯第⼀⾏添加下⾯三⾏配置,按照你的实际ip端⼝号配置:
#gitlab页⾯访问地址
external_url '192.168.136.132:80'
#gitlab ssh访问ip
gitlab_rails['gitlab_ssh_host']='192.168.136.132'
# gitlab ssh访问的端⼝
gitlab_rails['gitlab_shell_ssh_port']= 9922
# 使⽤gitlab作为镜像仓库的配置(如果不使⽤,则⽆需配置)
registry_external_url '192.168.136.132:4567'
保存退出,然后重启容器
docker restart gitlab
我们在gitlab⾥⾯创建⼀个测试项⽬。test-cicd
建⽴⼀个springboot项⽬,后⾯使⽤该项⽬做测试。
五、安装gitlab-runner(192.168.136.131)
安装runner,我们这⾥只讨论使⽤本地安装⽅法(⾮docker)
1、安装git
yum -y install opensource.wandisco/centos/7/git/x86_arch.rpm
yum -y install git
maven打包本地jar包
gitlab-runnerLimit会⾃带git,那为什么要单独安装git呢?因为gitlab-runner⾃带的git版本太低,运⾏时会报错,所以这边先单独安装git,然后在安装runner
2、安装gitlab-runner
curl -L packages.gitlab/install/repositories/runner/gitlab-runner/script.rpm.sh |sudo bash
yum -y install gitlab-runner
3、修改配置,让gitlab-runner以root运⾏
    修改⽂件
vi /etc/systemd/system/gitlab-runner.service
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/gitlab-runner "run""--working-directory""/root/gitlab-runner""--config""/etc/l""--service""gitlab-runner""--user"" root"
修改⾥⾯working-directory对应的配置,config指定的⽂件,还有最后的–user的值修改为 root
如果不修改成root⽤户运⾏,那后⾯你会遇到各种各样的权限问题,所以,为了省事,这边直接改成root⽤户运⾏。
4、重启runner
systemctl daemon-reload
systemctl restart gitlab-runner
好了,这样我们的gitlab-runner就已经安装好了,下⾯我们来注册runner到gitlab
5、安装docker
六、注册runner
    我们需要在gitlab-runner服务器上注册runner与gitlab关联。注册之前,我们必须要到gitlab项⽬中获
取我们的token,在gitlab中 具体项⽬→设置→cicd,然后展开runner的按钮,在这可以看到,红框中就是我们的token
sudo gitlab-runner register -n \
--url "192.168.136.132/" \
--registration-token "DheqPXLa1t4xhjJsUtQY" \
--executor "shell" \
-
-description "test-cicd-runner"
url:就是gitlab访问的地址
token:就是上⾯的token
executor:我们这⾥选择的是sehll,也可以⽤docker
description:就是runner的描述(可以后⾯修改)
好了,这样我们的runner就注册好了。这个时候刷新⼀下刚才的获取token页⾯,就会在下⾯看到注册好的runner
前⾯有绿⾊的⼩圆球,就说明注册成功了,如果不是绿⾊的,那说明注册的有问题。
点击后⾯的编辑⼩图标,勾上这个选项,保存
让我们没有指定标签的任务也能运⾏,不然要指定标签跟他⼀致才⾏。
七、编写.l
    gitlab cicd最核⼼的⽂件,就是.l。我们所有的编译、打包、部署的脚本都要在这⾥去编写。该⽂件存放⽬录就是项⽬的根⽬录,所以我们在刚才test-cicd项⽬根⽬录下创建⼀个⽂件.l,看下,我们写个最简单的脚本
stages:
- runner test
job1:
stage: runner test
script:
-echo'start to runner'
-echo'success runner'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。