最近在学习持续集成,自己试着采用maven+gitlab+Jenkins搭建了一套环境,还是遇到了几个问题,在此帖中记录一下。
安装java、maven、git的过程不做赘述。
注:所有的组件我都是用的Windows和Linux环境安装的,没有使用docker镜像,如果使用docker的话,安装过程可以省略。
1、安装maven私服nexus
详情见:https://www.cnblogs.com/effortn/p/13328613.html
2、安装Jenkins
因为Jenkins是需要jdk环境的,所以需要先安装jdk(略)。
我这里是Windows环境,下载安装的Jenkins服务,最新版本的官网下载地址:http://mirrors.jenkins.io/windows/latest,一路下一步就可以。最后是在服务里管理。
还有一种比较简单的安装方式,下载war包:http://mirrors.jenkins.io/war-stable/latest/jenkins.war,之后可以使用java -jar jenkins.war启动。
Jenkins启动后默认端口是8080,需要其他端口运行的话,war包可以在后面直接跟命令 --httpPort=8081,服务需要在安装目录的jenkins.xml里<arguments>标签里最后跟上 --httpPort=8081。
安装参见官网:https://www.jenkins.io/doc/book/installing/
3、安装gitlab
gitlab必须在Linux环境,我是使用的虚拟机vmvare,安装的Centos7,同时作为部署服务的伪服务器。安装就是添加镜像使用yum安装,不推荐官网镜像,对于网络不好的童鞋太不友好(深受其害)。
这边推荐一篇安装博客:https://www.cnblogs.com/ddz-linux/p/10698907.html
4、新建gitlab项目
新建gitlab项目,拉到本地,编写,上传。这里不过多描述。
我这里是做了一个spring boot的web项目,只有一个返回"Hello world"的地址,用来测试。
5、配置Jenkins插件
在配置Jenkins项目之前,先要安装一些Jenkins插件(在系统管理里的插件管理中进行安装)。
这里直接列出需要用到的插件:Git(用来拉取代码),Gitlab(触发gitlab的钩子请求),Publish Over SSH(部署项目),如果是部署war包到容器中,还需要Deploy to container。
插件安装后,在系统管理的全局工具配置里,进行工具的配置,主要是配置JDK、Git、maven相关的属性,这边不要安装,都是选择本地安装好的工具(如果本地没有安装,先进行安装)。
配置完成后,就可以开始配置项目了。
6、配置Jenkins项目
新建任务,创建一个自由风格的软件项目,我这边取名HelloWorld,具体配置如下:
其中Git需要添加认证,把用户和密码录入。构建触发,选择Build when a change is pushed to GitLab(通过gitlab代码提交后调用钩子方法实现项目的重新构建)。点击高级,生成密钥。
保存后Jenkins的配置就完成了。项目是放在Linux的/root/app/目录下,同目录还有需要执行的脚步exec.sh,如下:
#!/bin/bash #最后一个执行的脚本放到的位置是/app Project_name=$1 Port_no=$2 echo $Project_name echo $Port_no . /etc/profile # 进入到项目 cd /root/app # 找到原进程,kill pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}') if [ -z $pid ];then echo "this process is not exit" else kill -9 $pid fi #启动jar nohup java -jar $Project_name.jar --server.port=$Port_no -server -Xmx1000m -Xms1000m -Xmn700m -XX:+UseParallelGC >/var/log/$Project_name.log & echo "starting service..." sleep 20 #根据重启后是否有当前应用判断启动是否成功 pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}') #echo $pid if [ -z $pid ];then echo "启动失败" exit 1 else echo $Project_name : $pid "SUCCESS" fi
7、gitlab项目配置
gitlab上主要配置钩子方法。
先需要在管理中心,Admin Area > Network中,配置Outbound requests,两个选项都允许,再在下面的输入框中输入本地IP对应的hostname 。
之后配置项目的webhook(下面的都是测试):
最后就可以愉快的提交代码了。自动构建部署。
8、中间遇到的坑:
1) webhook无法访问本地网络:需要先配置network。
2) gitlab访问502:一般gitlab启动需要1-2分钟,等待一会儿就可以了。
3) Jenkins部署后控制台输出不中断,导致项目构建不稳定(其实已经部署好了):使用nohup,将控制台的输出输入到/dev/null(正式环境下都有专门的日志文件)。
4) jar包名称的版本问题:打包时可以不带版本号,也可以使用*号代替,我是用*号代替。