当前位置: 首页 > 后端技术 > Java

还在用詹金斯吗?试试Gitlab的CI-CD功能,很刺激!

时间:2023-04-01 18:51:51 Java

在《再见 Jenkins !几行脚本搞定自动化部署,这款神器有点厉害!》之前写过一篇文章,是关于使用Gogs+Drone实现自动化部署的。最近发现Gitlab的CI/CD功能也可以实现自动部署,而且使用起来还是蛮简单的!如果你使用Gitlab作为Git仓库,试试它的CI/CD功能。本文仍然以SpringBoot的自动部署为例,实践Gitlab的CI/DI功能。希望对大家有所帮助!SpringBoot实战电商项目商城(50k+star)地址:https://github.com/macrozheng/mall安装要通过Gitlab的CI/CD功能实现自动化部署,需要安装Gitlab、GitlabRunner、和马文。安装Gitlab首先,让我们安装Gitlab。对Gitlab安装使用不了解的朋友可以参考《10分钟搭建自己的Git仓库》。使用以下命令运行Gitlab服务。这里需要注意的是添加了hostname属性,这样我们就可以通过域名访问Gitlab了(为了避免一些不必要的麻烦)。环境变量GITLAB_ROOT_PASSWORD可以直接在Gitlab中设置root账户的密码;dockerrun--detach\--hostnamegit.macrozheng.com\--publish10443:443--publish1080:80--publish1022:22\--namegitlab\--restartalways\--volume/mydata/gitlab/config:/etc/gitlab\--volume/mydata/gitlab/logs:/var/log/gitlab\--volume/mydata/gitlab/data:/var/opt/gitlab\-eGITLAB_ROOT_PASSWORD=12345678\gitlab/gitlab-ce:latest我们需要通过域名git.macrozheng.com访问Gitlab。如果没有域名,可以修改本机的host文件来实现;192.168.7.134git.macrozheng.com由于我们的Gitlab运行在1080端口,如果我们想不加端口访问,可以使用Nginx做反向代理。对Nginx不熟悉的朋友可以看?在Nginx配置文件夹下添加git.conf配置文件,内容如下:server{listen80;#同时支持httpserver_namegit.macrozheng.com;#修改域名位置/{proxy_passhttp://192.168.7.134:1080;#设置代理服务访问地址索引index.htmlindex.htm;}error_page500502503504/50x.html;location=/50x.html{根目录/usr/share/nginx/html;}}之后,我们就可以通过域名git.macrozheng.com访问Gitlab,输入账号密码root:12345678登录;将我们的SpringBoot应用代码上传到Gitlab,这样Gitlab就准备好了!这里需要注意的是,如果在启动Gitlab时没有指定主机名,那么你项目的HTTP访问地址就是容器的ID,使用这个地址是无法访问Git仓库的!安装GitlabRunnerGitlab只是一个代码仓库。如果要实现CI/CD,需要安装gitlab-runner。gitlab-runner相当于Gitlab中任务的执行者。Gitlab在需要执行任务的时候会调用它。首先下载gitlab-runner的Docker镜像,选择alpine-bleeding,这个版本非常紧凑!dockerpullgitlab/gitlab-runner:alpine-bleeding使用如下命令运行gitlab-runner;dockerrun--namegitlab-runner--restartalways\-v/var/run/docker.sock:/var/run/docker.sock\-v/mydata/gitlab-runner:/etc/gitlab-runner\-dgitlab/gitlab-runner:alpine-bleeding这个时候我们查看gitlab-runner的容器日志,会发现如下错误,config.toml文件找不到。不要担心这个问题。当我们将gitlab-runner注册到Gitlab时,会自动生成该文件;ERROR:Failedtoloadconfigstat/etc/gitlab-runner/config.toml:nosuchfileordirectorybuilds=0接下来我们需要将gitlab-runner注册到Gitlab,打开Project->Settings->CI/CD功能,并获取跑者注册所需的地址和token;然后使用如下命令进入gitlab-runner容器Internal;dockerexec-itgitlab-runner/bin/bash使用如下命令在容器中注册runner;gitlab-runnerregister注册后,会出现一个交互界面,提示你输入注册地址、token、executor类型等信息,sshexecutor可以远程执行linux命令,非常好用,推荐使用这个!注册完成后,我们可以发现已经生成了config.toml文件,内容如下。以后想修改runner配置的时候,直接修改这个文件即可。concurrent=1check_interval=0[session_server]session_timeout=1800[[runners]]name="docker-runner"url="http://192.168.7.134:1080/"token="c2kpV6tX6woL8TMxzBUN"executor="ssh"[runners.custom_build_dir][runners.cache][runners.cache.s3][runners.cache.gcs][runners.cache.azure][runners.ssh]user="root"password="123456"host="192.168.7.134"port="22"在Gitlab的CI/CD设置中,我们可以发现已经成功注册了一个runner!安装MavenSpringBoot项目打包需要依赖Maven,我们需要先在服务器上安装。下载Maven的Linux安装包,下载地址:https://maven.apache.org/down...下载完成后使用如下命令解压到指定目录;cd/mydatatar-zxvfapache-maven-3.8.1-bin。tar.gz修改/etc/profile文件,添加环境变量配置:exportMAVEN_HOME=/mydata/apache-maven-3.8.1exportPATH=$PATH:$MAVEN_HOME/bin通过查看Maven版本测试是否安装成功。mvn-vMaven主页:/mydata/apache-maven-3.8.1Java版本:1.8.0_292,供应商:AdoptOpenJDK,运行时:/mydata/java/jdk1.8/jreDefault语言环境:en_US,平台编码:UTF-8OS名称:“linux",version:"3.10.0-957.el7.x86_64",arch:"amd64",family:"unix"安装JDKCentOS默认安装JRE,使用Maven时需要安装JDK。下载JDK8,下载地址:https://mirrors.tuna.tsinghua...下载完成后,将JDK解压到指定目录;cd/mydata/javatar-zxvfOpenJDK8U-jdk_x64_linux_xxx.tar.gzmvOpenJDK8U-jdk_x64_linux_xxx.tar.gzjdk1.8在/etc/profile文件中添加环境变量JAVA_HOME。vi/etc/profile#在配置文件中添加exportJAVA_HOME=/mydata/java/jdk1.8exportPATH=$PATH:$JAVA_HOME/bin#使修改后的配置文件生效。/etc/profile就可以使用了,接下来,通过Gitlab的CI/CD功能,可以实现SpringBoot应用的自动部署!首先在项目根目录添加.gitlab-ci.yml文件,定义两个task,一个task将应用代码打包成Jar包复制到指定目录,另一个task打包应用通过运行脚本run.shDockerimage并运行;#打包任务build-job:stage:build#指定标签,只有有这个标签的runner才会执行标签:-dockerscript:#使用Maven打包-mvncleanpackage#打包jar包,Dockerfile,复制运行脚本到指定目录-cptarget/mall-tiny-gitlab-1.0-SNAPSHOT.jar/mydata/build/mall-tiny-gitlab-1.0-SNAPSHOT.jar-cpDockerfile/mydata/build/Dockerfile-cprun。sh/mydata/build/run.sh#部署任务deploy-job:stage:deploytags:-dockerscript:#进入指定目录执行运行脚本-cd/mydata/build-chmod+xrun.sh-./run.sh值得一提的是,默认情况下,运行器只会执行具有相同标签的作业。由于我们已经将作业和运行器的标签设置为docker,因此我们可以在此处执行它。如果没有设置label,需要在runner的编辑界面开启runner执行没有label的job;由于我们的gitlab-runner使用的是ssh执行器,它会登录到我们指定的服务器,执行我们在.gitlab-ci.yml中定义的脚本命令,会在这之前从Git仓库中获取代码,所以我们还需要修改服务器上的主机文件;vim/etc/hosts192.168.7.134git.macrozheng.接下来就是将脚本提交到Git仓库。提交后,你会在Project->CI/CD->Pipelines中找到正在执行的任务;打开Pipeline详情页,可以发现我们定义的两个任务都已经执行了。成功;打开Job详情界面,我们可以看到任务执行过程中输出的日志信息;如果想手动执行Pipeline而不是提交trigger,可以在Pipelines页面点击RunPipeline按钮;运行成功后,可以通过以下地址访问项目:http://192.168.7.134:8088/swa...实现自动化部署!安装一个轻量级的gitlab-runner并编写一个简单的.gitlab-ci.yml脚本文件。其实之前我们介绍过很多自动化部署方案,比如Jenkins、Gogs+Drone、GitlabCI/CD,我们可以找到一个共同点,这些方案都离不开Linux命令。所以想要玩转自动化部署,还是得先玩转Linux命令!参考官方文档:https://docs.gitlab.com/ee/ci/项目源码地址https://github.com/macrozheng...本文GitHubhttps://github.com/macrozheng/mall-learning已收录,欢迎Star!