2019独角兽企业重金招聘Python工程师标准>>>
1.Jenkins介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 (以上介绍来源于百度百科)
其实通俗来说,Jenkins就是一个自动化部署项目的工具,帮我省去重复的运维工作。
2.环境准备
部署环境需要的工具,安装的资料网上都有很多,可以自行安装配置
- JDK
- Git
- Maven
环境变量
Java的环境变量我没配置,我安装的jdk版本环境变量自动有了
- Jenkins
jenkins安装方式常见的有三种
1.在官网下载war包部署在tomcat中
2.通过docker部署
3.通过yum install jenkins 安装
我选用的是第三种。安装步骤如下
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum install jenkins
service jenkins start 启动 service jenkins stop 停止 service jenkins restart 重启
然后访问http://${ip}/8080,可以看到jenkins那个小老头,根据自行配置安装插件,其中密码在这里
vi /var/lib/jenkins/secrets/initialAdminPassword
记得在阿里云上开放端口
3.Jenkins工具插件配置
3.1 插件配置
个人建议,Jenkins第一次进入推荐安装的插件就默认安装就行,省的还需要后续自己安装,当然,如果自己安装的话需要Maven和Git插件。
3.2 全局工具配置
- Maven
- JDK
- Git
因为SpringBoot是以jar的形式发布自带tomcat,所以不需要配置tomcat容器了。
4.配置项目
4.1 构建自由风格的项目
新建项目,选择构建自由风格的项目,给项目起个名字,然后点击Ok。
4.2 配置参数化构建过程
这里我用到了几个参数,因为可能有时需要提前准备好参数在进行构建,如下图:
- jar_path :本意是准备项目打包后的jar位置,其实这里是Jenkins工作空间
- spring_profile:这个是读取配置文件前缀,比如dev,test,prod
- jar_name:jar包名称
- project_name:项目名称
4.3 Git配置
用Git进行将项目Clone下来,配置自己的用户密码,Repository URL配置git地址(这里提供的地址是在gitlab上随意创建的SpringBoot项目,项目没什么特别)
4.4 构建
这里选择执行Shell,内容如下:
mvn clean install -Dmaven.test.skip=true echo $spring_profile $jar_path $jar_name cd /usr/local/shell/ ./stop.sh $jar_name echo "Execute shell Finish" ./startup.sh $spring_profile $jar_path $jar_name $project_name
在上面执行的Shell里面还用到了两个Shell,分别是stop.sh,实质就是找到jar执行的pid,然后kill,具体内容如下:
jar_name=${1} echo "Stopping" ${jar_name} pid=`ps -ef | grep ${jar_name} | grep -v grep | awk '{print $2}'` if [ -n "$pid" ] then echo "kill -9 的pid:" $pid kill -9 $pid fi
startup.sh内容如下,具体可以根据情况修改:
spring_profile=${1} jar_path=${2} jar_name=${3} project_name=${4} cd ${jar_path}/${project_name}/target/ echo ${jar_path}/${project_name}/target/ echo nohup java -jar ${jar_name} & BUILD_ID=dontKillMe nohup java -jar ${jar_name} --spring.profiles.active=${spring_profile} &
以上两个文件记得设置好权限,不然构建的时候会报错。
碰到的小插曲,Jenkins内无法使用mvn,报错mvn:command not found,这里的解决方式是添加软链接,将mvn命令也指向/usr/bin/mvn,如下:
ln -s /usr//apache-maven-3.6.0/bin/mvn /usr/bin/mvn
5 测试运行
5.1 运行
点击运行后,如图所示,刚刚预配置的参数都可以看到并可以修改,这里我们用默认配置好的就可以。
构建成功后浏览器访问项目地址,正常显示
6 Gitlab的webhook自动构建
6.1 Jenkins全局安全配置
需要在Jenkins上配置允许匿名用户访问
6.2 GitLab配置
这里的URL地址填写Jenkins项目构建触发器的地址带上token,然后选择触发器(一般选择push和merge就可以了)
点击测试返回201则成功。
然后查看Jenkins就会有一条构建记录
如果失败,我碰到的问题有下面几个
1.地址路径参数不对
2.Jenkins安全设置没有勾选运行匿名访问
7 总结
总体过程坑其实还是很多的,总是出现不同的问题,但是网上一般都有解决办法,前人也是一样踩过坑的,后面会把docker引进来。
大体结构
- 开发人员在gitLab上打了一个tag
- gitLab把tag事件推送到Jenkins
- Jenkins 获取tag源码,编译,打包,构建镜像
- Jenkins push 镜像到阿里云仓库
- Jenkins 执行远程脚本
5-1. 远程服务器 pull 指定镜像
5-2. 停止老版本容器,启动新版本容器 - 通知测试人员部署结果