硬件需求
一台windows系统,安装在windows上的jenkins应用,安装centos7(时区选上海)的虚拟机,上传到centos7上的tomcat
1.centos7
1.1.预处理
#关闭防火墙来开发端口
systemctl stop firewalld
systemctl disable firewalld
#同步上海时间
yum install ntpdate
ntpdate ntp1.aliyun.com
1.2.安装subversion
yum -y install subversion
mkdir -p /svn/
svnadmin create /svn/project
cd /svn/project/conf
vi svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /svn
vi passwd
root = 123456
vi authz
[/]
root = rw
svnserve -d -r /svn
svn地址 svn://192.168.182.132:3690/project
在windows里安装TortoiseSVN,在E盘导出project目录
将maven项目拷贝到 E:/project下并提交
如果maven项目是springboot的maven项目,需要
a.启动类继承SpringBootServletInitializer。
@SpringBootApplication
public class App extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(App.class, args);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
b.修改pom.xml,packaging中改为war并增加依赖
<packaging>war</packaging>
<!-- tomcat相关jar包用外部的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2.tomcat
#上传tomcat并解压
cd /root/apache-tomcat-8.5.54
#设置jdk和jre
vi bin/catalina.sh
export JAVA_HOME=/usr/local/jdk1.8.0_251
export JRE_HOME=/usr/local/jdk1.8.0_251/jre
3.jenkins
winsow上安装jenkins,等出现登录页面时去修改文件 updates/default.json
替换 updates.jenkins-ci.org/download 为 mirrors.tuna.tsinghua.edu.cn/jenkins
替换 www.google.com 为 www.baidu.com
然后重启jenkins服务。
用默认密码登录,安装默认插件后,设置登录账号,进入操作界面
修改目录下 jenkins.xml 的8080 端口为8081,再次重启jenkins服务
用账号登录http://localhost:8081/,进入操作界面。
b.系统管理 - 全局工具配置
jdk D:\Program\Java\jdk1.8.0_251
maven D:\Program\apache-maven-3.6.3
c.系统管理 - 系统配置
全局MAVEN_OPTS -Dmaven.repo.local=C:\Users\chenwq\.m2\repository
SSH Servers 点击新增
Name 任意
Hostname 192.168.182.132 主机名
Username root 登录名
Remote Directory / 登录目录
勾选 Use password authentication, or use a different key
Passphrase / Password 登录密码
d.构建
构建一个maven项目
源码管理
选中Subversion
svn://192.168.182.132/project/myProject2
并认证
e.构建触发器
轮询 SCM
日程表 * * * * * 每分钟去svn中检查,有更新就构建部署
f.Pre Steps
Build
RootPOM pom.xml
Goals and options clean install -Dmaven.test.skip=true -Ptest
g.构建后操作
选择 Send build artifacts over SSH
Name 任意
Source files target/myProject2.war
Remove prefix target
Remote directory war
Exec command ~/deploy.sh myProject2 8080 /root/apache-tomcat-8.5.54
其中deploy.sh需要上传到/root目录下,内容在下面
#权限处理
cd /root
chmod 777 *.sh
#解决文件格式问题
vi /root/deploy.sh
:set fileformat=unix
:wq
#deploy.sh内容
#!/usr/bin/bash
#默认变量值
TOMCAT_HOME="/root/apache-tomcat-8.5.54"
TOMCAT_PORT=8080
PROJECT="myProject2"
#参数检验./deploy.sh <projectname> [tomcat port] [tomcat home dir]
if [ $# -lt 1 ]; then
echo "you must use like this : ./deploy.sh <projectname> [tomcat port] [tomcat home dir]"
exit
fi
if [ ! -n "$2" ]; then
TOMCAT_PORT=$2
fi
if [ ! -n "$3" ]; then
TOMCAT_HOME="$3"
fi
#根据端口查找tomcatpid,可能有多个,循环中判断
tomcat_pid=`netstat -anp | grep $TOMCAT_PORT | awk '{printf $7}' | cut -d "/" -f 1`
echo "current :" $tomcat_pid
while [ -n "$tomcat_pid" ]
do
sleep 5
#进一步筛选
tomcat_pid=`ps -ef | grep $tomcat_pid |grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'`
echo "scan tomcat pid :" $tomcat_pid
if [ -n "$tomcat_pid" ]; then
echo "kill tomcat :" $tomcat_pid
kill -9 $tomcat_pid
fi
done
#备份
BAK_DIR=$HOME/war/bak/$PROJECT/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war
#publish project
echo "scan no tomcat pid,$PROJECT publishing"
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT.war
cp /war/$PROJECT.war "$TOMCAT_HOME"/webapps/$PROJECT.war
#remove tmp
rm -rf /war/$PROJECT.war
#start tomcat
"$TOMCAT_HOME"/bin/startup.sh
echo "tomcat is starting,please try to access $PROJECT conslone url"