最近发现公司服务拆分得过于分散,每次部署都是一堆的jar包,打包上传重启手都麻了,所以决定研究一下自动化部署
目前常用的自动化工具一个是K8S另一个就是这个Jenkins,K8S安装我看了下貌似有些复杂,所以选个简单的Jenkins试一下
2023-11-1 更新:
中间有其它事耽搁了一下,最终花了大概两天时间总算是成功了,好了接下来继续
安装Jenkins之前一定要在服务器上先安装好jdk,配置好环境变量,不会的自己搜一下
我这里用的还是jdk1.8
首先是下载安装包,这个还是老规矩去官网下载,安全放心 Jenkins官网所有历史安装包路径
当前最新版本如下,不过听说新版的需要更高版本的jdk支持,我用的还是jdk8,所以还是用以前的版本,这里选 jenkins-2.346
其实这个版本也会提示建议用Java11,但是最终可以使用就不纠结这个问题了
将包上传到服务器后解压,我这边统一放在/usr/local目录下了
rpm -ivh jenkins-2.346-1.1.noarch.rpm
我这里有个问题一直提示NOKEY,一开始我选的最新版本提示这个所以换了这个版本还是提示,不过不管了可以正常使用
当然谁知道怎么解决希望能告知我一声
解压后我们还要去修改一下Jenkins的启动文件,给它配置jdk路径
vi /etc/init.d/jenkins
大家自己看下服务器jdk的安装路径,后面多了个/bin/java,记得保存
/usr/java/jdk1.8.0-x64/bin/java
我们再去调整一下Jenkins的用户权限,防止后面操作文件的时候权限不够
vi /etc/sysconfig/jenkins
顺便改一下端口,8080容易冲突
改好后保存,然后我们还要开放一下端口,也可以直接关闭防火墙
firewall-cmd --add-port=1010/tcp --permanent // 开放端口1010
firewall-cmd --reload // 重启一下端口配置
我们找一下配置文件
find / -name *.UpdateCenter.xml
进入到这个文件中
vi /var/lib/jenkins/hudson.model.UpdateCenter.xml
这里也是Jenkins很坑的一个地方,就是无论你安装的是哪一个版本,但是它下载组件都是下载最新版本,然后后面各种提示插件版本异常问题,就是这个问题浪费了我一天时间
我们去清华镜像库找到对应版本 清华镜像库
点击进去后选择update-center.json,右键复制链接地址
将这个地址填入上面文件中,保存
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.346/update-center.json
到这里Jenkins的基础配置算完成了,我们去/etc/init.d/目录下启动它
cd /etc/init.d/
./jenkins start
启动的时候可以看到这个
这里面就是它的初始密码,后面不记得密码可以用下面的命令去找
cat /var/lib/jenkins/secrets/initialAdminPassword
好了,我们直接在浏览器输入地址 http://192.168.43.128:1010/
出现下面这个页面就是成功了(有时候页面一直提示“Please wait while Jenkins is getting ready to work …”,别急这是在下载组件等一会)
输入刚才那个密码就可以登录了
先不要安装插件,选选择插件来安装
选无,再点右下角安装
然后创建一个用户
继续点保存
细心的会发现我这里地址有问题,别在意,这是因为文档分两次写的,第一次在我本机,第二次再公司服务器安装的
这里是默认的就可以了,不需要改
点开始使用
可以看到这里还是有异常提示,不管它
我们去给它装一个中文插件
选这个安装插件
安装完后提示要重启
cd /etc/init.d
./jenkins restart # 重启服务
./jenkins stop # 停止服务
./jenkins start # 启动服务
有时候启动会报错,因为关闭的时候没有全部关闭完,我们用 ps -ef|grep jenkins命令看一下,有的话就直接kill -9
重启后我们重新登录,进来就可以看到页面变成中文了
要是安装有问题就卸载重装
sudo rpm -e jenkins # 卸载
sudo rpm -ql jenkins # 查看是否卸载成功
sudo find / -iname jenkins | xargs -n 1000 rm -rf # 彻底删除残留文件
Jenkins到这一步先放一会,为了方便后期使用,我们还需要在安装Jenkins的服务器上安装Maven和Git
Maven的下载地址 maven3.6.1下载地址
将下载好的包上传到服务器
然后解压
tar -zxvf apache-maven-3.6.1-bin.tar.gz
解压后还需要去配置环境变量
vim /etc/profile
在最后面加上这两行,也就是刚才解压的路径
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=${PATH}:${MAVEN_HOME}/bin
保存后刷新一下配置文件
source /etc/profile
然后验证一下是否安装完成
mvn -version
这样就是可以了
我们还需要给Maven配置一个仓库
先建一个文件夹
mkdir repository
然后我们去到刚才解压的maven包里找到配置文件settings.xml
cd apache-maven-3.6.1/conf
打开这个文件,找到第一箭头的内容复制放到下面换成自己刚建的文件夹
<localRepository>/usr/local/repository</localRepository>
继续往下拉,找到标签,我们在这里配置一下阿里云镜像
注意位置,别放到注释标签里了
<!--阿里云镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
继续往下拉找到profiles标签,配置默认的jdk信息
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
记得保存,到这里Maven安装完成
Git安装比较简单,直接通过命令就可以了
yum -y install git
好了,Maven和Git安装好后我们再回到Jenkins上,看下这个是怎么实现自动化部署的
因为我是Maven项目,代码放在Git上了,所以我还需要在Jenkins上安装这两个插件
等它安装好
然后我们再去装Git插件,这里我也不知道Git和GitHub插件的区别就都装了
一样的装好后需要重启Jenkins才能生效,我们去重启Jenkins
重启后我们重新登录Jenkins
然后继续在系统管理-全局工具配置里面配置我们服务器上安装的Maven和jdk路径
配置服务器的Maven配置文件路径(注意自己装在哪里就写哪里)
/usr/local/apache-maven-3.6.1/conf/settings.xml
然后配置jdk,自己的安装路径,别名随便取
/usr/java/jdk1.8.0-x64
往下拉,还有个Maven要配置,先取消自动安装的勾选,填入Maven的安装路径,name随便取就行
/usr/local/apache-maven-3.6.1
点保存
因为我Jenkins服务器和我项目服务器不在一起,所有这里还需要一个插件Publish over SSH用来将Jenkins打好的jar包推送到指定服务器
我们去安装Publish over SSH插件
安装完记得重启Jenkins,然后重新登录Jenkins
这次我们选系统管理-系统配置
找到Publish over SSH配置,点新增
在里面填入我们要部署服务的服务器
注意这个/usr/local/webapp,后面我们会将jar推送到这个服务的这个位置
点那个高级,在里面填服务器密码
勾选这个使用密码,当然也可以用其它方式,只要最终能连上服务器就好了
只需要一个密码
测试一下,提示success就说明配置没问题,Jenkins可以连接到指定服务器
要是有多台服务器就在下面继续新增
准备工作全部完成,我们可以开始部署项目了
新建一个任务
我这里是Maven项目,直接用Maven就可以了
这里是配置Git账号密码的
点这个进去
出来这个页面,填上账号密码
点了添加后再看这个地方就可以选择刚才的Git账号了
指定要部署的分支
往下拉,选这个Send files or execute commands over SSH
在里面填入这些,往下看,我会一个个的说下每一个都是什么意思的
第一个104就是我们在上面配置的要部署服务的服务器
第二个sakura-service/sakura-order/target/sakura-order-1.0.0.jar路径是我们项目打包后jar包的路径,但是要注意项目结构,这里路径错了后面jar推送不过去的,当然你要是只有一个jar包可以写 **/target/*.jar
下面是我的项目目录
第三个sakura-service/sakura-order/target/路径是我们推送jar包到目标服务器后要去掉的路径,在上面我们配置的路径是/usr/local/webapp,如果不加这个那么最终jar包推送过去目录就是/usr/local/webapp/sakura-service/sakura-order/target/,加了这个就会去掉sakura-service/sakura-order/target/
第三个/sakura-order是补充目录,就是我想把我的jar放在/usr/local/webapp/sakura-order下面,因为我这是个微服务有很多模块,所以我不想放在一起
最后这个sh /usr/local/webapp/sh_folder/start.sh就是启动jar包的脚本,这个需要先放到指定位置的
脚本内容如下,大家可以根据自己需要自己整个脚本,我这里只是为了示例
pkill -f 根据启动命令去杀死之前的进程,nohup java -jar这个没什么好说的启动jar包
其实Exec command里面也可以直接写 nohup java -jar /usr/local/webapp/sakura-order/sakura-order-1.0.0.jar >/dev/null 2>&1 &
pkill -f 'java -jar /usr/local/webapp/sakura-order/sakura-order-1.0.0.jar'
sleep 5
nohup java -jar /usr/local/webapp/sakura-order/sakura-order-1.0.0.jar >/dev/null 2>&1 &
注意脚本要先放好啊,不然会报错的
点保存
像我这种多个模块可以继续在下面add的,但是这里只是演示就不继续了,其实就是按上面配置来,换一下目录就可以了
接下来就是见证奇迹的时刻,成败就在此了,要是失败了就该各位头疼回去再看一遍是不是哪里搞错了
点立即构建
点这个可以进去看具体情况
这里有个控制台输出的
第一次会要很久,因为需要下载jar包,后面就很快了
大家也可以看下有没有哪里报错,一般有异常这里也会提示的
正常的就是下面这样的,显示一个文件推送成功,最终状态SUCCESS
我们去目标服务器看一下,可以看到jar包已经推送上来了
再更新一个问题,我在给一台服务器部署的时候发现推送成功了,但是最后脚本没有执行,经过两个小时的排查,最终发现那台服务器的环境变量有问题,在这里谴责一下我那些已经离职的前同事们,做事靠谱点行不行
好了开始解决问题,我们先去目标服务器查看下环境变量路径
echo $PATH
下面就是这台服务器的路径
然后我们把这个拿出来,在前面加上export PATH=
export PATH=/usr/local/java/jdk1.8.0_221/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
再把它放到我们的脚本前面,保存后就可以了
再提醒大家一下,不用的构建历史记得删除掉,这玩意真的占内存,突然提示服务器内存不够一脸懵,再一看都被Jenkins占了
点进去可以删除
也可以在配置任务时候配置一下
到这里Jenkins的安装以及自动化部署全部完成,大家有什么问题都可以随时问我,需要安装包的也可以找我