本文主要介绍基于jenkins完成自动化ci的过程,开发人员可以使用此流水线自动部署服务。本地测试环境为springboot微服务项目。用户提交代码到gitlab,触发jenkins拉取gitllab上的代码,然后完成编译构建成jar包,并完成sonarsqube代码质量检测,然后将jar包传输到部署机器上,使用docker部署运行起来。
使用的虚拟机环境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
[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
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
linux安装docker
mkdir -p /data
linux安装maven
docker安装gitlab
docker安装jenkins
docker安装sonarsqube
idea创建springboot项目
jenkins插件安装
离线安装:将下载好的插件直接上传到目录plugins重启(我的目录是/data/jenkins_home/plugins)
上传后重启jenkins,重启可以在url后加restart完成。如:http://192.168.59.129:8090/restart
已经整理好的插件上传到gitee上,需要的话可以联系下载
https://gitee.com/jsonsvn/jenkins-plugins.git
手动配置:
主机上安装maven后将maven的安装目录移动到jenkins数据卷中
重命名文件夹
在页面上配置,MAVEN_HOME要使用容器内部目录,不要使用宿主机目录
我们要将构建好的jar包发送到目标服务器上并部署起来,需要使用Publish Over Ssh插件,用于jenkins可以连接到目标服务器。
配置
系统配置最下面会有个Publish over SSH
点击新增
密码需要点击高级设置,勾选Use password authentication, or use a different key,然后填写密码
Remote Directory 需要在设置的主机上提前创建好,否则会报错。
点击下面的测试按钮测试是否配置成功。
填入项目的地址
项目私有,创建私有的账号密码
指定分支
配置成功后jenkins会将代码下载到jenkins用户的家目录的workspace目录下,如下图操作:
1.点击增加构建步骤----选择调用顶层Maven目标
2.配置maven构建执行的命令3.点击立即构建查看日志会看到执行的命令查看容器目录 会发现在workspace项目目录下多了个target目录,jar包在里面。
将sonnar-scanner目录移动到jenkins数据卷目录中
修改conf/sonar-scanner.properties
#sonarqube服务器地址
sonar.host.url=http://192.168.59.129:9000
#源代码文件编码
sonar.sourceEncoding=UTF-8
系统配置中搜索sonar
点击增加sonar按钮
添加密钥时没相应,自己重启了几次jenkins没定用,然后就输入了个name后回车,然后重新进后就可以添加密钥了,也不知道为啥。
创建完成后点击保存。
报错:
由于之前用命令检测过代码,所以会报错,需要把之前生产的/.scannerwork目录删除。
在工程下准备dockerfile文件和docker-compose.yml文件
Dockerfile文件
FROM openjdk:8u262
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
COPY hello-demo.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar hello-demo.jar
docker-compose.yml
version: '3.1'
services:
hello-demo:
build:
context: ./
dockerfile: Dockerfile
image: hello-demo:v1.0.0
container_name: hello-demo
ports:
- 8081:8080
此时就可以构建成功了,完成后访问地址:
表示已经部署成功了。
在gitlab上
点击下面的Add webhook后提示
不能填写本地主机的url允许本地地址构建webhook
需要在admin settings network 处勾选
重新添加
会在项目下看到webhook的地址
点击此处测试自动化构建
解决测试webhook返回403问题
解决:
在系统配置里将此处勾选去掉
系统管理 -> 系统设置 -> Enable authentication for ‘/project’ end-point
重新测试会发现jenkins已经开始自动构建了。