Jenkins+gitlab自动构建环境搭建

  最近在学习持续集成,自己试着采用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包名称的版本问题:打包时可以不带版本号,也可以使用*号代替,我是用*号代替。

原文地址:https://www.cnblogs.com/effortn/p/13354592.html