目录
8、把jenkins构建的项目,发布至其他的Linux服务器
8.1、jenkins安装Publish Over SSH插件
Linux环境要求:
- JDK 8版本及以上
1、下载jenkins
中文官网:Jenkins
下载链接:Jenkins 的安装和设置
下载完成后,文件名为jenkins.war
上传到Linux中,我上传到的目录为:/usr/local/jenkins
2、 启动jenkins
jenkins.war启动方式与jar一样(也可以添加启动参数),如下
java -jar jenkins.war
上述启动方式会占用当前shell窗口,当进行其他的命令操作或者关闭连接时,jenkins会关闭,后续请使用后台运行的方式:
nohup java -jar jenkins.war &
3、访问jenkins
我的Linux的IP地址为:192.168.221.128,jenkins默认端口为8080
使用浏览器访问:http://192.168.221.128:8080
注意:
- 若浏览器一致页面一直加载不出来,证明是防火墙没有关闭,需要关闭下防火墙,或者开放8080端口
查看防火墙状态:
systemctl status firewalld
关闭防火墙:
systemctl stop firewalld.service
如:
一切就绪后,jenkins页面加载如下:
加载完毕后,如下:
选择"安装推荐的插件",下一个页面如下:
- 正在安装推荐的插件,也需要等待...
安装完成后,进入下个页面:
- 由于创建管理员用户时,必须使用邮箱,直接点击"使用admin账户继续"
下一个页面直接保存即可:
修改admin密码:
- 进入到设置界面,在该界面最下方输入重置密码即可
4、在当前Linux上安装maven
4.1、更新wget命令,支持https请求
yum install -y ca-certificates
4.2、下载maven
wget https://dlcdn.apache.org/maven/maven-3/3.9.1/binaries/apache-maven-3.9.1-bin.tar.gz
4.3、解压安装maven
tar -zxvf apache-maven-3.9.1-bin.tar.gz
4.4、配置maven环境变量
vi /etc/profile
复制下面内容至末尾:
# maven 我的maven安装在/usr/local/maven中
export MAVEN_HOME=/usr/local/maven/apache-maven-3.9.1
export PATH=$PATH:$MAVEN_HOME/bin
使profile文件立即生效
source /etc/profile
4.5、maven配置阿里云镜像
- 默认的镜像很慢,需要使用国内镜像
编辑maven的配置文件:
vi /usr/local/maven/apache-maven-3.9.1/conf/settings.xml
在图示位置加入下述配置:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4.6、配置maven依赖下载的位置
- 我设置的下载位置为:/usr/lcoal/maven/repository
继续在上述配置文件中,加入配置:
<localRepository>/usr/local/maven/repository</localRepository>
至此,maven下载配置完成
5、Linux安装Git
jenkins需要通过Git去拉去代码,因此我们需要在Linux机器上安装下Git
git安装很简单,如下:
- 使用yum安装git
yum install git
6、构建我们第一个项目
6.1、配置支持maven的项目构建
- 默认新建任务下,是没有maven项目构建的选项,需要我们再安装下maven支持
在可选插件中,输入maven:
我们再新建任务时,发现已经支持maven项目构建了:
6.2、新建任务
1>选择构建maven项目
2>配置git项目克隆地址
配置完账号密码后,需要选择下:
3>jenkins配置maven
4>设置pom文件位置
git拉取项目代码后,我的pom文件在git项目"helloworld"第一级目录中,如;
我们根据上述git目录结构,在jenkins配置pom即可 :
7、启动jenkins任务
我们上述操作完成后,如下;
日志如下:第一次构建会很慢:
至此,maven构建已完成,会生成一个jar文件,我的文件位置如下:
8、把jenkins构建的项目,发布至其他的Linux服务器
场景:当jenkins构建项目生成jar包后,我们需要发布到其他的服务器中进行运行(对应实际工作中的开发/测试/生产环境,jenkins服务器专门用于构建项目,最好不要在jenkins服务器直接运行jar项目)
前置工作(这里我就不演示了):
- 需要准备一台Linux虚拟机,我准备的虚拟机IP:192.168.221.129
- 该虚拟机需要关闭下防火墙
- 需要安装JDK1.8
8.1、jenkins安装Publish Over SSH插件
- publish over ssh插件的作用:jenkins构建项目生成jar等文件后,通过publish over ssh插件发送至其他服务器
8.2、配置ssh servers
我们安装完插件后,需要配置ssh服务器地址(也就是jenkins往哪里发送文件)
位置:系统管理--系统配置--Publish over SSH中
配置如下:
8.3、修改任务配置Post Steps(后置步骤)
找到 Post Steps(项目构建完成的后置步骤,也就是jar文件有了以后,想做什么操作):
注意:这个配置一定要知道当前jenkins构建项目后,生成的jar文件在哪(日志中可以看到):
我的在 :/root/.jenkins/workspace/我的第一个项目/target/helloworld-0.0.1-SNAPSHOT.jar
在此基础上,我的Post Steps配置如下:
ssh的相关问题注意:
很多人在文件发送成功后,找目标服务器上找不到文件的原因:
<1>在ssh servers中配置目标服务器时
- remote directory必须配置,否则通过ssh发送文件时,文件会不知所踪;
- 若remote directory配置了,那么目标服务器必须存在该路径。
不然会报一下错误:
ERROR: Exception when publishing, exception message [Failed to connect and initialize SSH connection. Message: [Failed to change to remote directory [/usr/myproject]]]
<2>在任务构建配置下(也就是Post Steps中),remote directory填写的路径,目标服务器才会自动生成该路径
如:
- 在配置ssh server时,我配置了remote directory为/usr/myproject
- 在侯建任务的配置中,我也配置了remote directory为/usr/myproject
那么,在目标服务器上,我传输文件的真实路径为:
/usr/myproject/usr/myproject
8.4、重新构建项目
注意:在配置ssh server时,我配置了remote directory为/usr/myproject,所以在目标服务器,请创建下这个路径
启动任务构建项目:
日志如下:
8.5、检查目标服务器
- 检查项目是否启动
- 查看jar文件位置
8.6、访问目标服务器项目
我的springboot项目很简单,只有一个测试接口,如下:
注意:目标服务器要记得关闭防火墙,或者开发8080端口
systemctl stop firewalld
浏览器直接访问:
http://192.168.221.129:8080/test
结果如下:
9、配置构建项目前置清理脚本
9.1、在目标服务器上创建清理脚本
我的配置如下:
- 脚本路径:/usr/myproject/
- 脚本名称:clear.sh
如下
9.2、给脚本添加权限
chmod 777 clear.sh
9.3、jenkins配置前置步骤
9.4、编写脚本代码
vi /usr/myproject/clear.sh
我的脚本代码如下:
#!/bin/bash
#删除历史文件target目录,注意:不能删除myproject文件夹,因为ssh server中指定了该目录,必须存在
#由于每次构建,这个项目会重新覆盖,因此不需要删除
#rm -rf /usr/myproject/target/
#输出以下启动参数:./start.sh时,后面跟随的参数,我这里只跟随一个参数
# $1表示第一个
echo "arg:$1"
#获取正在运行的jar包pid
#$1:表示启动jar命令传入的第一个参数,指定下项目关键字,如我启动的项目为helloworldxxx.jar,那么./start.sh helloworld
#awk:表示字符串处理的关键字
#{printf $2}:表示获取结果中的第二列,也就是pid
pid=`ps ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
#打印下pid
echo $pid
#判断:如果pid为空,提示一下,否则kill会杀掉不存在的pid,导致报错
#if:条件判断; -z 表示zero,非空判断(注意前后空格)
if [ -z $pid ];
then
ech "程序没有启动"
else
#kill进程
kill -9 $pid
echo "程序进程已kill"
fi
#fi:表示判断结束
9.5、测试前置步骤
1>首先测试是否运行helloword程序
ps -ef|grep java
2>重新构建项目,会执行前置步骤
- 我们查看日志(在控制台界面 偏上位置):
- 执行后,要迅速去目标服务器执行以下命令(多执行几次)
ps -ef|grep java
至此,Linux部署jenkins,实现项目构建及发布已实现