本文只实现最基本的流程,所有操作均在本机新装的虚拟机上从0开始搭建,系统是Centos7.9,运存8G,内存建议多分点,实测gitlab服务器正常运行就得2G内存,加上其他的服务最后可用内存只剩3个G多点

基本流程如下:

  1. IDEA开发代码提交到Gitlab服务器
  2. GitRunner自动触发将服务器上的代码自动git pull,并打成jar包
  3. 在本机生成docker镜像,停用删除原镜像容器发布新容器

Gitlab-ce安装

安装

我用的版本是这个 gitlab-ce-13.1.2-ce.0.el7.x86_64,下载地址
拷贝到目录之后,执行 rpm -ivh gitlab-ce-13.1.2-ce.0.el7.x86_64.rpm就可以了,成功之后是下面这样会有个小狐狸
在这里插入图片描述

修改配置(避坑)

执行 vi /etc/gitlab/gitlab.rb,修改初始化配置信息,
在这里插入图片描述
这块的配置信息刚开始我只配置了external_url 和unicorn[‘port’],但是启动之后访问gitlab主页老是报502,最后在这发现的 记一次gitlab打开页面502报错 – 解决办法,大致就是启动超时了

external_url 'http://localhost:8099'    #本机gitlab服务器的地址,默认是8080.防止冲突做出修改即可
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_workhorse['auth_backend'] = "http://localhost:8091"
unicorn['enable'] = true
unicorn['worker_timeout'] = 90
unicorn['worker_processes'] = 3
unicorn['port'] = 8091  # gitlab服务的端口,不要和external_url的重复一样就行
puma['enable'] = false
postgresql['shared_buffers'] = "256MB"
postgresql['max_connections'] = 200

wq保存之后,执行 gitlab-ctl reconfigure 使配置生效,首次过程有点长,耐心等待5,6分钟左右即可如下图生效成功
在这里插入图片描述
这是gitlab常用命令

gitlab-ctl start         # 启动所有 gitlab 组件
gitlab-ctl stop          # 停止所有 gitlab 组件
gitlab-ctl restart       # 重启所有 gitlab 组件
gitlab-ctl status        # 查看服务状态
gitlab-ctl tail          # 查看日志

登录gitlab服务器

在宿主机上访问虚拟机的地址,就可以访问登录主页了,页面会提示让修改初始密码,直接修改就行了.,默认用户root,修改完就可以直接登录了在这里插入图片描述
在这里插入图片描述

Gitlab-Runner安装

安装

runner还是rpm包方式安装,gitlab-runner下载地址,执行以下命令安装

rpm -ivh gitlab-runner-12.9.0-1.x86_64.rpm #

安装完可以使用 gitlab-runner status 来查看状态,装完就开始运行了
在这里插入图片描述
执行报这个在后面加上即可成功 --force --nodeps
在这里插入图片描述

注册

gitlab-runner就相当于执行流水线的车间了,里面可以有好多条流水线,不同的流水线对应不同的项目,现在需要把这个runner和已经安装的gitlab服务关联起来

执行gitlab-runner register开始注册,
第一步和第二步需要天gitlab服务器的地址和token,具体位置参见右图,描述和tag可以随便填,执行器选"shell".最后完成注册
在这里插入图片描述
完成之后在刷新Runner页就能看到刚才新注册的runner了,
在这里插入图片描述

点击编辑进来之后,给 Run untagged jobs 打上对钩保存,这样对所有项目都能执行CICD操作
在这里插入图片描述

修改权限(避坑)

安装成功后会创建一个名为 gitlab-runner 的新用户,所有流水线任务都是以这个用户去执行的,这样操作文件夹会有许多权限问题,为了方便,暂时将这个用户的权限改为root的,修改内容如下图

/etc/systemd/system/gitlab-runner.service # 修改runner权限
systemctl daemon-reload # 保存后使配置生效
systemctl restart gitlab-runner.service  # 重启runner服务

在这里插入图片描述
保存后查看是否修改成功,如下图有root就算成了

ps aux|grep gitlab-runner

在这里插入图片描述

Runner流水线测试

创建项目

直接在搭建的gitlab里面创建即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拉取到本地IDEA

位置自己定,新拉的boot模板很干净,为了防止端口冲突,启动口设置成8081
在这里插入图片描述

拉取到服务器

执行下面指令拉取到本地,路径里面已经携带用户信息了,到时执行 git pull就不需要再验证

git clone http://root:12345678@192.168.211.128:8099/root/buildtest3.git

Docker配置

docker常用命令

下面这些是整理的常用命令,在本次部署中会用到

安装
yum install -y docker

centos7/6 
查看状态及启停
systemctl status docer

docker启动       
systemctl start docker/systemctl start docker.service
service docker start

重启docker服务
systemctl restart  docker
sudo service docker restart

关闭docker    
systemctl stop docker
service docker stop

----------------------------------------------------
查看所有镜像
docker images

生成镜像
docker build -t 镜像名称 .

删除镜像
docker rmi 镜像名称

启动镜像并实现端口映射
docker run -p 192.168.211.128:8081:8081 镜像名

生成容器并启动镜像
docker run -d -P --name 容器名 镜像名
-----------------------------------------------------------

查看所有容器
docker ps -a

启动/停止/重启容器
docker start/stop/restart 容器Id

创建容器并实现端口映射
docker run --name 容器名 -d -p 8081:8081 镜像名

删除容器
docker rm -f 容器id

根据镜像名停止删除已启动的容器
docker stop $(docker ps -q --filter ancestor=image-name)

查看容器10条实时日志
docker logs --tail="10" 容器名

查看已启动容器日志
docker logs -f 容器名

安装

执行一下命令完成安装

yum install -y docker

装完之后查看一下状态发现没启动后,然后start一下
在这里插入图片描述

Maven配置

配置

tar包传上去解压,然后在/etc/profile末尾配置环境变量

MAVEN_HOME=/home/admin2/devtools/apache-maven-3.5.4
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

最后执行下面这连个就看到配置成功了

source /etc/profile  # 使文件生效
mvn --version  # 查看版本

在这里插入图片描述

JDK配置

配置

tar包传上去解压,然后在/etc/profile末尾配置环境变量

JAVA_HOME=/home/admin2/devtools/jdk1.8.0_11
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

最后执行下面这连个就看到配置成功了

source /etc/profile  # 使文件生效
java -version  # 查看版本

在这里插入图片描述

流水线测试

项目配置文件修改

.gitlab-ci.yml :新增一个.gitlab-ci.yml 文件,待会项目提交之后,runner就是执行这里面的流程完成自动发布的,目前只定义了一个deploy任务

stages:
  - deploy
build:
  stage: deploy
  script:
    - whoami
    - cd /home/admin2/projects/testbuild
    - git pull  # 拉取最新代码
    - echo "git pull success"
    - mvn package  # 打jar包
    - echo "mvn package success   "
    - ./restartImage.sh   # 执行启动镜像脚本

restartImage.sh 替换镜像生成启动新镜像封装的脚本

#!/bin/bash
app_dir=/home/admin2/projects/testbuild/target
apps=(demo)
# 获取镜像对应的容器Id
exisImageId=$(docker ps -qa --filter ancestor=buildimage)
echo  $exisImageId;

# 如果容器存在就停止然后删除容器
if [ ! -z "$exisImageId" ]; then
  docker stop $exisImageId
  docker rm -f $exisImageId
  echo "************ del images success!";
fi

cd /home/admin2/projects/testbuild

# 删除调当前文件下的jar包
rm --force demo.jar
echo "************ rm oldJar success"

# 把打包好的jar包复制出来
cp target/demo-0.0.1-SNAPSHOT.jar  demo.jar
echo "************ cp newJar success"

# 生成新镜像并映射端口启动
docker build -t buildimage .
echo "************ create newImage success"

docker run --name mybuildimage -d -p 8081:8081 buildimage
echo "************  image start success"

Dockerfile 生成镜像的配置信息,做最小修改即可

FROM openjdk:8u252-jre
#jdk版本
COPY *.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

在这里插入图片描述

pom文件里需要再加上这个,不然待会maven打包会有问题,这是规避单元测试类的

           <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skipTests>true</skipTests>
				</configuration>
			</plugin>

在这里插入图片描述

然后把项目提交push,成功之后查看流水线执行结果,点击 CICD->Popelines,
在这里插入图片描述
进来之后看到有一个任务执行失败了,看看什么原因导致的,往下看
在这里插入图片描述
在这里插入图片描述
cd文件夹权限不够,那就加一下
在这里插入图片描述
把/home下的文件权限全部给gitlab-runner放开(这是测试的随便整,生产环境可不能这样)

chmod -R gitlab-runner  /home/*

随便改点东西提交再触发一下CICD在这里插入图片描述
还是没通过,是新加的restartImage.sh脚本没执行权限,那就 chmod 777 restartImage.sh 后再试一下
在这里插入图片描述

再次触发构建

加完之后在重新提交触发构建,可以看到所以脚本都执行完了,访问主页也可以看到镜像启动项目可以访问了
在这里插入图片描述
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐