Jenkins 自动部署
Jenkins + svn + war + maven 自动部署
在使用Jenkins前,先确保服务器上已经安装好需要的环境。(jdk、maven、构建的服务器上的tomcat 等等)
安装 Jenkins
以 rpm 的方式安装
官方方式:
https://pkg.jenkins.io/redhat-stable/
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
这一步失败也没关系,可能以前有 import 过。
yum install jenkins
手动方式:
如果上面的方式提示文件下载失败(连接超时),可以手动下载rpm包然后上传:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
sudo rpm -ivh jenkins-2.263.4-1.1.noarch.rpm
注意要根据自己下载的版本来填写。
安装之后的默认路径如下:
路径 | 描述 |
---|---|
/usr/lib/jenkins/jenkins.war | WAR包 |
/etc/sysconfig/jenkins | 配置文件 |
/var/lib/jenkins/ | 默认的JENKINS_HOME目录 |
/var/log/jenkins/jenkins.log | Jenkins日志文件 |
修改配置文件:
sudo vim /etc/sysconfig/jenkins
JENKINS_USER="root" #默认用户 jenkins,不修改成root可能权限会不够
JENKINS_PORT="9999" #默认端口 8080,可能会跟tomcat冲突,改一下
配置 jdk 路径:
如果 jdk 不是通过 yum 安装的,则需要修改脚本文件加入手动安装的 jdk 路径。
sudo vim /etc/init.d/jenkins
在 candidates
中加入一行写自己的 jdk 路径:
图里是默认配置,jdk路径要写到 java 这个执行程序为止
启动:
sudo service jenkins start
首次访问:
首次访问 jenkins 页面是会提示输入密码,页面会告诉你密码放在哪个路径下。
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
选择安装推荐的插件,等待安装:
创建一个用户:
开始使用,首页界面:
配置 Jenkins
需要或可能会用到以上这几个菜单。
安装插件
在插件管理中,搜索并安装。
Publish Over SSH:用于远程连接服务器。
Subversion:用于连接svn代码版本库,获取最新的代码。
勾选后,点直接安装,等待安装完成即可
系统配置
安装完插件后,打开系统配置(拉到最下面),进行配置。
配置完后,记得在对应服务器上创建该目录。
全局安全配置
授权策略根据实际情况进行配置,这里是直接开到最大权限。
全局工具配置
Maven 配置文件路径:
JAVA_HOME 配置:
MAVEN_HOME 配置:
凭证管理
提前添加 svn 的凭证,等一下就不用添加了。
输入自己svn的账号密码
创建 Jenkins 任务
构建文件丢弃策略:
源码管理:
构建触发器:
每天的0-7点之间Jenkins会自动选择一个空闲的时间检查代码是否有新版本,如果发现代码版本库有更新,则触发构建。
根据实际情况也可以配置成其他的触发方式。
构建步骤:
invoke top-level Maven targets
使用 maven 进行构建,目标中写入要执行的 maven 命令。
构建后的动作:
Send build artifacts over SSH
这里的 Remote directory 是相对路径,就是之前系统配置时填的 ssh 上传文件路径。(这里就相当于于上传到 /usr/local/jenkins-upload/tocmat/ROOT.war)
2021-3-22 记录:Exec command突然失效,未查到原因,改成了下面的方式才可以。
cd /usr/local/jenkins-upload/tomcat
./restart.sh
尝试构建
然后在构建历史中,控制台输出,可以看到每一次构建的日志。
back to normal 表示构建正常结束,成功!
附加信息
服务器 restart.sh 脚本
#!/bin/bash
logfile=./script.log
{
echo ""
echo $(date +"%Y-%m-%d %T") "- Jenkins auto build start"
if [ ! -e ROOT.war ]; then
echo "file 'ROOT.war' is not exists, please check the jenkis config."
exit 0
fi
echo $(date +"%Y-%m-%d %T") "- Stop tomcat."
systemctl stop tomcat
# 删除旧的备份文件
echo $(date +"%Y-%m-%d %T") "- Delete the old version of the bakcup file."
rm -rf /usr/local/jenkins-upload/backup/ROOT.war
# 将当前正在运行的版本备份一份
echo $(date +"%Y-%m-%d %T") "- Backup the current version file."
cp -f /usr/local/dev/apache-tomcat-8.5.27/webapps/ROOT.war /usr/local/jenkins-upload/bakcup/ROOT.war
# 删除当前版本
echo $(date +"%Y-%m-%d %T") "- Delete the old version file."
rm -rf /usr/local/apache-tomcat-8.5.63/webapps/*
# 将新构建的版本放到 tomcat 下
echo $(date +"%Y-%m-%d %T") "- Move the new version file."
mv -f /usr/local/jenkins-upload/tomcat/ROOT.war /usr/local/dev/apache-tomcat-8.5.27/webapps/ROOT.war
echo $(date +"%Y-%m-%d %T") "- Start tomcat."
systemctl start tomcat
echo $(date +"%Y-%m-%d %T") "- Jenkins auto build over."
} >> $logfile
我的 tomcat 配置了 systemctl 所以这里用的是这样去启动和停止,实际根据自己调整。
同款 tomcat 配置参考这个:https://blog.csdn.net/qq_31150365/article/details/89330366
如何确定自己的 Source files 在哪里
在构建历史的控制台输出中,可以看到每一次的构建日志。
通过日志就可以看到输出的文件是在什么目录下了。
demo 是 jenkins 的任务名称,所以后面的这一段,就是 source files 了。