jenkins+gitlab+sonar+harbor+docker完成cicd过程

说明

本地测试环境为springboot微服务项目。用户提交代码到gitlab,触发jenkins拉取gitllab上的代码,然后完成编译构建成jar包,同步完成sonarsqube代码质量检测。然后在jenkins内部完成生成镜像,并将镜像推送到harbor仓库中,然后部署到对应的服务器上。

依赖环境部署

环境准备

使用环境说明

使用的虚拟机环境centos7.9,使用vmware安装

同步主机时区为亚洲,并同步时间
[root@linux-node ~]# echo "ZONE=Asia/Shanghai" >> /etc/sysconfig/clock         
[root@linux-node ~]# rm -f /etc/localtime
#链接到上海时区文件       
[root@linux-node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
设置yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
安装docker

linux安装docker

创建数据目录将数据持久话到该目录下,以便后期好维护

mkdir -p /data

安装maven

linux安装maven

gitlab安装部署

docker安装gitlab

harbor安装部署

docker安装harbor

jenkins安装部署

docker安装jenkins

sonarqube部署

docker安装sonarsqube

创建java工程并测试将代码上传到gitlab仓库
gitlab上创建项目

在这里插入图片描述

创建springboot工程,并将代码提交到hello-test工程下

idea创建springboot项目

jenkins集成篇

说明

jenkins插件安装
离线安装:将下载好的插件直接上传到目录plugins重启(我的目录是/data/jenkins_home/plugins)
上传后重启jenkins,重启可以在url后加restart完成。如:http://192.168.59.129:8090/restart
已经整理好的插件上传到gitee上,需要的话可以联系下载
https://gitee.com/jsonsvn/jenkins-plugins.git

创建自由风格的项目

在这里插入图片描述

jenkins全局配置

管理Jenkins中点击
在这里插入图片描述

配置maven

手动配置:
主机上安装maven后将maven的安装目录移动到jenkins数据卷中
在这里插入图片描述
重命名文件夹
在这里插入图片描述
在页面上配置,MAVEN_HOME要使用容器内部目录,不要使用宿主机目录
在这里插入图片描述

配置jdk

在这里插入图片描述
页面配置jdk
在这里插入图片描述

jenkins系统配置

我们要将构建好的jar包发送到目标服务器上并部署起来,需要使用Publish Over Ssh插件,用于jenkins可以连接到目标服务器。
配置
在这里插入图片描述
系统配置最下面会有个Publish over SSH
在这里插入图片描述
点击新增
在这里插入图片描述
密码需要点击高级设置,勾选Use password authentication, or use a different key,然后填写密码
在这里插入图片描述
Remote Directory 需要在设置的主机上提前创建好,否则会报错。
点击下面的测试按钮测试是否配置成功。
在这里插入图片描述

jenkins集成git

填入项目的地址
项目私有,创建私有的账号密码
指定分支
在这里插入图片描述配置成功后jenkins会将代码下载到jenkins用户的家目录的workspace目录下,如下图操作:
在这里插入图片描述

集成maven构建

1.点击增加构建步骤----选择调用顶层Maven目标
在这里插入图片描述
2.配置maven构建执行的命令在这里插入图片描述3.点击立即构建查看日志会看到执行的命令在这里插入图片描述查看容器目录 会发现在workspace项目目录下多了个target目录,jar包在里面。在这里插入图片描述

参数化构建过程

需要安装插件Git Parameter
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第1张图片

jenkins+gitlab+sonar+harbor+docker完成cicd过程_第2张图片
为了将代码构建前切换到对应的版本,增加一个构建步骤
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第3张图片
将其拖到构建步骤前,顺序是这样的。
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第4张图片
需要在gitlab上创建标签
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第5张图片
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第6张图片
填写标签名jenkins+gitlab+sonar+harbor+docker完成cicd过程_第7张图片
修改代码 打标签为2.0.0
然后刷新jenkins,发现构建已经变成 build with parameters
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第8张图片

这样就可以完成基于标签去完成版本的发布了,需要回退的只需要点击对应的版本,让jenkins去构建完成就可以了。

集成sonarqube完成代码质量检测

配置sonar-sanner到jenkins中

将sonnar-scanner目录移动到jenkins数据卷目录中
在这里插入图片描述
修改conf/sonar-scanner.properties

#sonarqube服务器地址
sonar.host.url=http://192.168.59.129:9000
#源代码文件编码
sonar.sourceEncoding=UTF-8

使用sonar-sanner命令检测

/data/jenkins_home/sonar-scanner/bin/sonar-scanner  -Dsonar.sources=./  -Dsonar.projectKey=hello-demo2  -Dsonar.java.binaries=./target

竟然成功了。为何没要求输入用户密码或者要sonar.projectKey?是因为本地有缓存了吗?

jenkins下载SonarQube Scanner插件

在这里插入图片描述

jenkins上系统配置sonar

系统配置中搜索sonar
在这里插入图片描述
点击增加sonar按钮
在这里插入图片描述
添加密钥时没相应,自己重启了几次jenkins没定用,然后就输入了个name后回车,然后重新进后就可以添加密钥了,也不知道为啥。
在这里插入图片描述
在这里插入图片描述
创建完成后点击保存。

添加sonar检测步骤
全局配置sonar

全局工具配置
在这里插入图片描述

配置sonar检测步骤

点击增加构建步骤
在这里插入图片描述
保存后构建测试。

查看日志可以看到代码检测的命令
在这里插入图片描述

报错:
在这里插入图片描述
由于之前用命令检测过代码,所以会报错,需要把之前生产的/.scannerwork目录删除。
在这里插入图片描述

将代码编译成镜像上传到harbor仓库中

说明

本步骤需要jenkins内部具有制作镜像的能力。

配置使得jenkins内部具有构建镜像能力 docker in docker配置

修改/var/run/docker.sock权限,使其属于root组,并且其他用户有读和写的权限
在这里插入图片描述
修改jenkins数据数据卷,jenkins内部要有执行docker命令的能力,需要将下面文件挂载到容器内部。
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第9张图片

Jenkins docker-compose.yml文件

version: '3.1'
services:
  jenkins:
    image: jenkins/jenkins:2.319.1-lts
    container_name: jenkins
    ports:
      - 8090:8080
      - 8091:50000
    volumes:
      - /data/jenkins_home/:/var/jenkins_home/
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/docker/daemon.json:/etc/docker/daemon.json

由于之前使用docker run方式启动的jenkins,此时需要删除掉容器,不要删除之前创建的数据卷就可以,然后使用docker-compose方式启动,此时不会删除数据,以后推荐改成docker-compose方式,这样运维人员也知道你的启动时加了哪些参数了,易于维护。

docker  stop jenkins
docker  rm  jenkins
docker-compose  up -d 

jenkins+gitlab+sonar+harbor+docker完成cicd过程_第10张图片
进入到容器内部,测试,发现成功。
在这里插入图片描述

jenkins制作自定义镜像并推送barbor
mv  target/*.jar docker/
docker build -t hello-demo:$tag docker/
docker login -u admin -p Harbor12345 192.168.59.129:8888
docker tag hello-demo:$tag 192.168.59.129:8888/hello/hello-demo:$tag
docker push 192.168.59.129:8888/hello/hello-demo:$tag

构建步骤后增加执行shell 完成构建镜像并推送到harbor仓库中
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第11张图片
harbor中查看
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第12张图片

将镜像分发到对应的服务器并使用docker部署起来

1.告知目标服务器拉取哪个镜像
2.判断当前服务器是否正在运行该容器,需要删除
3.如果目标服务器已经存在当前镜像,需要删除
4.目标服务器拉取harbor上的镜像
5.将拉取下来的镜像运行成容器

准备脚本文件

harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
port=$5
container_port=$6

imagename=$harbor_addr/$harbor_repo/$project:$version
echo $imagename
container_id=$(docker ps -a |grep $project |awk '{ print $1 }')
echo $container_id

if [ "$container_id" != "" ] ; then
  docker stop $container_id
  docker  rm  $container_id
fi
tag=$(docker images |grep $project |awk '{ print $2 }')
echo  $tag

if [[ "$tag" =~ "$version" ]] ; then
   docker rmi $imagename
fi

docker login -u admin -p Harbor12345 $harbor_addr
docker pull $imagename
docker run -it -d -p $port:$container_port --name $project  $imagename

为了使得脚本文件在任意地方都能执行,将脚本文件放到环境变量中。
chmod u+x deploy.sh
cp deploy.sh /usr/bin
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第13张图片
添加构建后操作操作步骤,选择在这里插入图片描述

jenkins+gitlab+sonar+harbor+docker完成cicd过程_第14张图片

jenkins+gitlab+sonar+harbor+docker完成cicd过程_第15张图片
里面的端口为了灵活展示可以使用参数化构建添加变量的方式。此处略。
jenkins+gitlab+sonar+harbor+docker完成cicd过程_第16张图片

你可能感兴趣的:(devops,jenkins,docker,运维)