centos7安装Jenkins+配置spring boot 自动部署(史上最全)
一、前言
jenkins是一个霓虹国的大佬(川口耕介)开发的一个开源的持续集成工具,让你从重复的工作中解脱出来(例如拉取源码,打包、编译、部署、重启服务、环境隔离等),享受美滋滋的一键部署的畅快感
Jenkins安装配置的过程中可谓一步一坑,本文主要讲述怎么解决这个过程中『99%的情况下你会遇到的但是99%的文章都不会提及的深坑』。以及后面如何配置spring boot项目的一键部署
本文涉及的环境
- centos7.2
- jenkins 2.2
- java 8
- maven 3.0
- git 1.8
二、Jenkins原理
简单了解下Jenkins原理,有助于接下来理解各个安装步骤
在一个软件的部署过程中会涉及到很多软件,例如版本控制的git(svn),构建打包的maven、容器tomcat,语言编译的jdk等等。每个软件都相当于一个齿轮,而Jenkins则像一个中间件,把各个齿轮接驳起来,并带动其他齿轮运转。
三 、 Jenkins所依赖的软件的安装
(下面的软件如果已经安装过,则可跳过)
Java 8 (或更高)
# 获取rpm包
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"
# 基于rpm包安装
yum -y localinstall jdk-8u131-linux-x64.rpm
# 查看是否安装成功
java -version
# 环境变量配置
nano ~/.bash_profile
# 在最后面加上这两行
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
# 编译
source ~/.bash_profile
# 查看环境变量是否生效
echo $JAVA_HOME
maven
yum install maven
git
yum install git
四、Jenkins安装
1. 下载安装
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
2. Jenkins常用的几个命令
# 启动
service jenkins start
# 重启
service jenkins restart
# 关闭
service jenkins stop
# 开机自启
systemctl enable jenkins
3. 修改Jenkins端口号
端口8080比较热门,Jenkins安装版默认也是8080,很容易和其他软件的端口冲突。所以需要修改端口,本文以修改为7575端口为例 备注:本文是通过yum方式安装的。如果直接下载war包安装的配置方式可能有差异
vim /etc/sysconfig/jenkins
# JENKINS_PORT修改为你想要的端口
JENKINS_PORT="7575"
4. 修改初始密码
网上很多文章提到可以通过vim /var/lib/jenkins/secrets/initialAdminPassword
来查看初始密码。然后不知道是因为版本的原因亦或是其它原因,这个文件中的密码总是无法登陆。所以需要手动修改为一个已知的密码
# 切换到配置目录
cd /var/lib/jenkins/users/
ls # 会有一个admin_3094158771002410946目录和 users.xml文件
cd admin_3094158771002410946
vim config.xml
在最下方找到此节点,将passwordHash内容替换为密码 111111的hash值
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<!-- <passwordHash>#jbcrypt:$2a$10$DYGjZdlJ4CtLcUoNooTqP.xPGW53yiD6qrBCFoA12u55bXQdTkhtu</passwordHash> -->
<passwordHash>#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS</passwordHash>
</hudson.security.HudsonPrivateSecurityRealm_-Details>
修改后重启Jenkins
# 重启
service jenkins restart
5. 开始访问Jenkins
开启防火墙端口
firewall-cmd --zone=public --add-port=7575/tcp --permanent
# 开启后,一定要记得重启防火墙,否则不会生效
firewall-cmd --reload
浏览器访问此地址
http://${服务器ip}/7575
输入账号密码 admin/111111
之后会遇到一个神坑,提示『Jenkins无法连接到网络』。
出现此错误的原因并不是无法连接到网络,而是https证书搞的鬼
http://{ip}:7575/pluginManager/advanced。 这里面最底下有个【升级站点】,把其中的链接改成http的就好了
# 重启Jenkins
service jenkins restart
6. 插件配置
Jenkins第一次进入推荐安装的插件就默认安装就行。至于java和git、maven接下来需要手动指定 点击左上角下拉菜单,找到『系统管理』,『全局工具配置』(话说这个入口藏得忒深!)
有小伙伴可能会被这两个配置项难住,不知道在怎么找。不用着急,通过这两个命令即可# 查看 java 目录
echo $JAVA_HOME
/usr/java/jdk1.8.0_131/ # 填入此值即可
# 查看maven目录
mvn -v
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven # 填入此值即可 /usr/share/maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_131/jre
# 查看git目录
find / -name 'git'
/etc/selinux/targeted/active/modules/100/git
/etc/bash_completion.d/git
/usr/bin/git # 填入此值即可
# 省略。。。
五、创建任务
1. 点击右上角的创建任务,输入任务名,并选择『构建一个自由风格的软件项目』
2. 勾选『参数化构建过程』,点击点击参数,选择『文本参数』
需要添加四个参数,参数的含义如下
* jar_path :本意是准备项目打包后的jar位置,其实这里是Jenkins工作空间
* spring_profile:这个是读取配置文件前缀,比如dev,test,prod
* jar_name:jar包名称
* project_name:项目名称
3. 添加git源码仓库地址,以及对应的账号密码(或者鉴权key)
4. 点击构建tab,点击增加『构建步骤』→『执行shell』
在里面添加如下命令
mvn clean install -Dmaven.test.skip=true
echo $spring_profile $jar_path $jar_name
cd /usr/local/shell/
sudo ./stop.sh $jar_name
echo "Execute shell Finish"
sudo ./startup.sh $spring_profile $jar_path $jar_name $project_name
5. 上述步骤的命令需要依赖两个shell脚本,需要手动创建并赋予权限,并配置sudo执行无需确认密码。
# 创建存放脚本的目录
mdkir /usr/local/shell
# 创建并设置脚本内容
vim 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} &
# 创建并设置脚本内容
vim stop.sh
# 脚本内容如下
r_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
给脚本添加执行权限和sudo执行免密码确认(这一步很重要,不要遗漏,否则会报sudo: no tty present and no askpass program specified错误)
# 添加执行权限
chmod +x startup.sh
chmod +x stop.sh
# sudo执行免密码确认
sudo visudo # 相当于打开了一个vi编辑器
# 在末尾添加内容
jenkins ALL=(ALL) NOPASSWD: ALL
# 重启Jenkins
service jenkins restart