Centos7安装部署Jenkins以及配置(三)
迟来的第三篇文章,这篇文章是最后一篇,介绍怎么使用Jenkins实现自动化拉取代码并打包部署。
1、设置JDK环境
前面的文章有说过,Jenkins本身需要JDK的支持,而高版本的Jenkins需要的是JDK11或者17以上的支持,但是现在很多Java的SpringBoot项目,大多用JDK8已经够用了,这样就会出现问题。Jenkins在编译项目时,会用高版本的JDK去编译代码,这样的话编译一般都会报错而无法进行下去,并且JDK8的一些类和方法在高版本中已经没有了,这种情况编译也是肯定会报错的,所以我们需要指定Jenkind用哪个版本的JDK去编译代码。
如下图所示,选择JDK安装。
填好内容点击应用保存即可。
2、Jenkins新建项目
准备工作都已经做好了, 开始使用Jenkins实现自动部署。
首先在首页新建项目,选择好之后点击确定即可。
3、源码管理配置
新建了项目,就开始详细的配置了,首先要配置我们的代码仓库的地址和认证信息。
点击添加认证信息之后就会出现如下图所示弹窗,我们选择使用用户名和密码来进行认证,只需要填写用户名和密码即可,其它的无需填写,填写完之后点击弹窗右下角的添加即可。
源码信息报错
配置正确
4、指定Jenkins编译代码的JDK版本
前面我们配置了JDK的版本,这里就需要使用。这样配置之后,即使我们的项目使用的JDK是8版本,编译时也不会报错
5、执行Shell脚本
我们可以写一些shell脚本,让脚本在Jenkins执行maven打包之前执行。
比如,如果项目是微服务项目或者多模块项目,那么一般都会有一些common模块之类的,这些模块是基础,其它的模块都需要依赖它,所以,在maven执行package命令之前肯定需要先将common之类的模块使用 mvn install 命令来将它安装好,这样之后的maven打包才能正常执行。
如上图所示,在 Build Steps 中,我们选择标红的 Execute shell。这里有需要注意的重点,我在上图中标注了三个构建选项,分别是 Execute shell,执行maven打包,最后是执行ssh相关。这三个构建选项是有排序的,例如,如果你先选择了maven打包再去选择执行shell脚本,那么Jenkins的执行顺序就是先maven打包再去执行你的shell脚本,所以,你想要怎样的执行顺序,就要按照先后的顺序去一一选择新建对应的构建选项。根据我的使用情况来看,一般的顺序都是先执行 shell脚本,在执行maven打包,最后在执行ssh相关将jar包发送到服务器。当然这只是我个人的使用经验,具体的各位自行根据实际情况来
脚本内容如下,这里只是我个人使用的,做个推荐
#!/bin/bash
#修改目录权限(确保 Jenkins 用户有写入权限)
#这里可能会执行失败,所以我推荐先在服务器上执行授权命令,这样这里的授权命令就可以省去不用执行了
echo "Granting permissions to Maven repository..."
chown -R jenkins:jenkins /maven/repository/*
echo "Granting permissions succeeded!"
#执行 Maven install,执行这个是因为如果是微服务项目,一个子模块会需要依赖微服务中其他的模块,所以需要先执行install,将所需的依赖全部安装好。
#/maven/apach-maven-3.6.3/bin/mvn 以这种方式执行maven命令是因为,即使设置了jenkins全局配置的环境,并且也在服务器中有权限,但是在构建时依然会报错,mvn未找到命令。
echo "Starting Maven install build..."
/maven/maven-3.6.3/bin/mvn clean install -DskipTests
echo "Maven install build succeeded!"
#检查构建结果
if [ $? -eq 0 ]; then
echo "Build succeeded!"
else
echo "Build failed! Exiting..."
exit 1
fi
6、执行maven打包(Invoke top-level Maven targets
)
7、执行SSH相关(Send files or execute commands over SSH)
Source files是配置要上传的文件,一般是在 /var/lib/jenkins/workspace/ 这个路径下面的项目所在的位置。例如,jenkins将代码拉取到了这个目录,/var/lib/jenkins/workspace/socketdemo,socketdemo就是代码所在的目录。然后 Source files实际要填写的值就是socketdemo/target/*.jar。
Remove prefix 是移除路径的前缀文件夹。填写为 socketdemo/target/。
Remote directory 是要将成的jar包上传到云服务器中的哪个文件夹下。填写为 /app/demo。这个路径是根据实际情况来写。
Exec command 是上传完成后,想要执行的脚本,可以实现上传后,自动启动项目。
下面是 Exec command 的脚本内容,这只是我个人使用的,只是做个推荐
#!/bin/bash
#首先执行下面的语句,就算给jenkins赋予了权限,可能也无法在服务器上传jar包,高版本的Jenkins可能没有这个问题,无需写第一行代码。
cp /var/lib/jenkins/workspace/yourpath/target/xxx.jar /app/xxx/
APP_NAME=weblog-web-0.0.1-SNAPSHOT.jar
pid=`ps -ef | grep $APP_NAME | grep -v grep|awk '{print $2}'`
function is_exist(){
pid=`ps -ef | grep $APP_NAME | grep -v grep|awk '{print $2}'`
if [ -z ${pid} ]; then
String="notExist"
echo $String
else
String="exist"
echo $String
fi
}
str=$(is_exist)
if [ ${str} = "exist" ]; then
echo " 检测到服务已启动,pid 是 ${pid} "
kill -9 $pid
else
echo " 服务未启动 "
echo "${APP_NAME} is not running"
fi
str=$(is_exist)
if [ ${str} = "exist" ]; then
echo "${APP_NAME} 已经启动了. pid=${pid} ."
else
source /etc/profile
# 输出到指定文件
#nohup java -Xms300m -Xmx300m -jar /app/weblog/$APP_NAME --spring.profiles.active=prod > app.log 2>&1 &
nohup java -Xms300m -Xmx300m -jar /app/weblog/$APP_NAME --spring.profiles.active=prod > /dev/null 2>&1 &
echo "服务已重新启动 .."
fi
8、构建项目
上述所有的步骤全部完成之后就可以使用Jenkins构建项目了,当然新手可以一步步来,不用一次性完成所有步骤。
选择创建的项目点击进去构建,也可以选择最右边的绿色三角形构建。
点击进去构建
点击Builds里面的构建情况查看详情。
查看控制台详细输出
9、结尾
好了,到这里Jenkins的安装和使用以及怎样使用Jenkins实现自动化拉取代码和部署的教程都写完了,当然,这里我只介绍了Java后端相关的,前端代码也可以自动拉取部署到服务器,前端代码这一块,Jenkins需要安装Nodejs插件,详细的我就不写了,网上基本都有教程。好了,到此结束,喜欢的话不妨点个收藏和关注,谢谢支持,有错误的地方欢迎指正哈。