之前,要实现自动打包部署,一般需要Jenkins。不过现在Gitlab的CI/CD功能也可以实现自动化部署,操作更简单。如果你也在使用Gitlab作为Git仓库,试试它的CI/CD功能。一、安装要通过Gitlab的CI/CD功能实现自动化部署,我们需要安装Gitlab、GitlabRunner、Maven等服务。1.1安装Gitlab首先我们需要在自己的服务器上安装Gitlab。如果不知道如何安装,可以参考《10分钟搭建自己的Git仓库》。为了避免一些不必要的麻烦,我们可以使用如下命令运行Gitlab服务。这里需要注意的是添加了hostname属性,这样我们就可以通过域名访问Gitlab了。环境变量GITLAB_ROOT_PASSWORD可以直接在Gitlab中设置root账号密码:dockerrun--detach\--hostnamegit.bilibili.com\--publish10443:443--publish1080:80--publish1022:22\--名称gitlab\--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.bilibili.com访问Gitlab了。如果没有域名,可以修改本机的host文件:192.168.7.134git.bilibili.com由于我们的Gitlab运行在1080端口,如果我们想不加端口访问,可以使用Nginx的反向代理来处理它。对Nginx不熟悉的朋友可以看看《Nginx的这些妙用,你肯定有不知道的!》。下面是在Nginx配置文件夹下添加的git.conf配置文件,内容如下:server{listen80;#支持HTTPserver_namegit.bilibili.com;#修改域名location/{proxy_passhttp://192.168.7.134:1080;#设置代理服务访问地址索引index.htmlindex.htm;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}}完成后,我们就可以通过域名git.bilibili.com访问Gitlab,输入账号密码root:12345678登录。将我们的SpringBoot应用代码上传到Gitlab,这样Gitlab就准备好了!这里需要注意的是,如果在启动Gitlab时没有指定主机名,那么你项目的HTTP访问地址就是容器的ID,使用这个地址是无法访问Git仓库的!1.2安装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注册gitlab-runner时,会自动生成这个文件。ERROR:Failedtoloadconfigstat/etc/gitlab-runner/config.toml:nosuchfileordirectorybuilds=0接下来我们需要将gitlab-runner注册到Gitlab,打开Project->Settings->CI/CDfunction,获取跑步者注册所需的地址和令牌。接下来使用如下命令进入gitlab-runner容器内部。dockerexec-itgitlab-runner/bin/bash然后,使用以下命令在容器中注册运行器。gitlab-runnerregister注册时,会出现一个交互界面,提示你输入注册地址、token、executortype等信息。ssh执行器可以远程执行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上打开项目,然后可以发现runner已经在Gitlab的CI/CD设置中注册成功了!1.3安装MavenSpringBoot项目打包需要依赖Maven,我们需要先在服务器上安装。一、下载MavenLinux安装包,下载地址。下载完成后,使用以下命令解压到指定目录。cd/mydatatar-zxvfapache-maven-3.8.1-bin.tar.gz接下来修改/etc/profile文件,增加环境变量配置。exportMAVEN_HOME=/mydata/apache-maven-3.8.1exportPATH=$PATH:$MAVEN_HOME/bin我们可以使用mvn-v命令来测试Maven是否安装成功。Maven主页:/mydata/apache-maven-3.8.1Java版本:1.8.0_292,供应商:AdoptOpenJDK,运行时:/mydata/java/jdk1.8/jre默认语言环境:en_US,平台编码:UTF-8OS名称:“linux”,version:"3.10.0-957.el7.x86_64",arch:"amd64",family:"unix"1.4安装JDKCentOS默认安装JRE,需要安装JDK才能使用Maven。首先下载JDK8,下载完成后,将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/profile2.使用CI/CD部署就绪,接下来就可以通过Gitlab的CI/CD功能实现SpringBoot应用的自动部署!首先在项目根目录添加.gitlab-ci.yml文件,定义两个task,一个task将应用代码打包成Jar包复制到指定目录,另一个task打包通过运行脚本run.sh应用程序的Docker镜像启动并运行。#打包任务build-job:stage:build#指定标签,只有这个标签的runner才会执行tags:-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需要说明的是,默认情况下runner只会执行同label的Job。由于我们已经为Job和runner都设置了标签为docker,所以我们可以在这里执行它。如果没有设置label,需要在runner的编辑界面设置中开启runner执行没有labels的作业。由于我们的gitlab-runner使用的是ssh执行器,它会登录到我们指定的服务器,执行我们在.gitlab-ci.yml中定义的脚本命令,并从之前的Git仓库中获取代码,所以我们还需要修改服务器上的主机文件。vim/etc/hosts192.168.7.134git.bilibili.com接下来就是将脚本提交到Git仓库。提交后,会在Project->CI/CD->Pipelines中找到正在执行的任务。打开Pipeline的详情页,可以看到我们定义的两个任务的执行结果。打开作业详情界面,我们可以看到任务执行过程中输出的日志信息。如果您想手动执行Pipeline而不是提交触发器,可以单击Pipelines页面上的RunPipeline按钮。可以看到,使用它的CI/CD功能来自动化部署真的很酷!安装一个轻量级的gitlab-runner并编写一个简单的.gitlab-ci.yml脚本文件。
