一、测试环境
三台服务器来测试,一台SVN服务器,一台Jenkins服务器,一台应用服务器,如下:
Jenkins服务器: 192.168.84.100
SVN服务器: 192.168.84.105
应用服务器:192.168.84.101
二、jenkins安装配置
首先去Jenkins官网下载Jenkins 选择LTS版本的war包进行下载
下载之后上传到服务器上去,然后,配置jenkins的安装路径,在Linux环境中,Jenkins主目录默认在/root/.jenkins我这里把它修改到/home/jenkins下,修改/etc/profile文件
[root@swarm1 jenkins]# vim /etc/profile
在后面加上
export JENKINS_HOME=/home/jenkins
然后使其生效
[root@swarm1 jenkins]# source /etc/profile
然后通过以下命令启动Jenkins,我这里没有使用tomcat来运行jenkins,而是直接采用命令的形式来运行的:
[root@swarm1 jenkins]# nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8899 >jenkins.out 2>&1 &
其中-Dhudson.util.ProcessTree.disable=true主要是用来解决execute shell无法启动进程用的,启动好之后,访问: http://192.168.84.100:8080/输入
/home/jenkins/secrets/initialAdminPassword
下的密码
使用推荐安装
创建一个用户
安装所需的两个插件:
1.Publish Over SSH安装好之后进行全局工具配置
对JDK和Maven进行配置
然后进行系统配置
配置SSH如下所示
Passphrase:密码(key的密码,如果你设置了)
Path to key:key文件(私钥)的路径
SSH Server Name:标识的名字(随便你取什么)
Hostname:需要连接ssh的主机名或ip地址,此处填写应用服务器IP(建议ip)
Username:用户名
Remote Directory:Remote Directory:用SSH连接后的远程根目录,这个目录是必须存在的,Jenkins不会自动创建目录。Jenkins会将文件远程复制到该目录。(注意:SSH连接的用户需要有权限才可以创建、删除、移动文件及文件夹)
"Use password authentication, or use a different key":使用密码验证(这里使用了密钥认证所以不开启)
配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接
Port:端口(默认22)
Timeout (ms):超时时间(毫秒)默认即可
Disable exec:禁止运行命令
配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接
如果有多台应用服务器,可以点击”增加“,配置多个“SSH Servers”点击“保存”以保存配置
三、项目构建运行
创建一个Maven项目
然后配置SVN,新增用户
在Build中输入如下maven命令
maven build后就是发布,那么该如何发布呢?说到发布,其实就是将项目构建结果move到它运行时应该所在的位置。那么这就需要使用Publish over SSH来Execute shell,配置如下
勾选仅在构建成功时运行
经测试如下写法才能正确启动应用才不会被jenkins杀掉
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
nohup java -jar /home/boot/demo/spring-boot-0.0.1-SNAPSHOT.jar &
sleep 3s
#改回原来的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
SSH Server Name:选个一个你在系统设置里配置的名字
Transfer Set Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔)
Remove prefix:移除目录(只能指定Transfer Set Source files中的目录,这里移除了target目录表示只将spring-boot-0.0.1-SNAPSHOT.jar传到目标服务器,否则会在目标服务器创建target目录)
Remote directory:远程目录(根据你的需求填写,这里没有填写默认会继承系统配置,即在SSH中配置的/home/boot目录下)
Exec command:把你要执行的命令写在里面(这里的命令是在目标服务器上执行的)
高级选项如下:
Exclude files:排除的文件(在传输目录的时较有用,使用通配符,例如:/*.log,/*.tmp,*.txt/)
Pattern separator:分隔符(配置Transfer Set Source files的分隔符)
No default excludes:禁止默认的排除规则
Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。
Flatten files:只上传文件,不创建目录(除了远程目录)
Exec timeout (ms):运行脚本的超时时间(毫秒)
Exec in pty:模拟一个终端执行脚本
Add Transfer Set:增加一个传输配置
Remote directory is a date format:远程目录建立带日期的文件夹(需要在Remote directory中配置日期格式),具体格式参考下表:
Remote directory | Directories created |
---|---|
‘qa-approved/’yyyyMMddHHmmss | qa-approved/20101107154555 |
‘builds/’yyyy/MM/dd/’build-${BUILD_NUMBER}’ | builds/2010/11/07/build-456 (if the build was number 456) |
yyyy_MM/’build’-EEE-d-HHmmss | 2010_11/build-Sun-7-154555 |
yyyy-MM-dd_HH-mm-ss | 2010-11-07_15-45-55 |
然后点击立即构建
输出如下
在服务器上查看进程是否启动成功
[root@swarm2 demo]# ps -ef|grep 'java -jar'
root 28024 1 62 18:15 ? 00:00:08 java -jar /home/boot/demo/spring-boot-0.0.1-SNAPSHOT.jar
root 28071 17082 0 18:15 pts/0 00:00:00 grep --color=auto java -jar