Jenkins

下载安装

官网https://jenkins.io/download/

选择Generic Java package (.war)使用wget下载war包

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

后台运行起来

nohup java -jar jenkins.war &

访问8080端口 进入jenkins初始化设置

第一次登录需要输入口令,在运行日志里(nohup.out)可以找到一串password

登录后选择 Install suggested plugins 安装官方推荐的插件

插件一次可能不能全部安装成功,可以点Retry再安装。直到全部安装成功

安装完后进入 Create First Admin User 页面,设置用户名密码,设置完后进入Jenkins主界面

配置

  • 系统管理 > 插件管理 > 可选插件

选择Git和Maven Integration,Publish over SSH、SSH插件。已经安装的可以不用操作

  • 系统管理 > 全局工具配置

配置java、git、maven等需要用的

  • 配置ssh免登录

运行Jenkins的服务器上生成密钥对,输入ssh-keygen -t rsa命令后一路回车,出现矩形图像说明生成成功,在~/.ssh/下会有私钥id_rsa和公钥id_rsa.pub生成

id_rsa.pub中的内容复制到应用服务器~/.ssh/下的authorized_keys,可用以下命令完成:

1
2
ssh-copy-id -i id_rsa.pub 192.168.0.xx
chmod 644 authorized_keys
  • 配置Publish over SSH

系统管理 > 系统设置 > 找到Publish over SSH

Passphrase 不用设置
Path to key 写上生成的ssh路径:/root/.ssh/id_rsa

下面的SSH Servers是重点,新增一个
Name 随意起名代表这个服务,待会要根据它来选择
Hostname 配置应用服务器的地址
Username 配置应用服务器登陆用户名
Remote Directory 不填

填完后可以点test一下,返回success说明配置ok

部署项目

首页选择新建,输入项目名称,选择maven项目(如果没有安装maven插件,这里没有maven项目的选项)

勾选丢弃旧的构建保持构建的天数保持构建的天数自己选择填写

源码管理:选择自己的源码托管平台,我这边选择了Git,填好地址信息

构建环境:勾选“Add timestamps to the Console Output”,代码构建的过程中会将日志打印出来

Build:Goals and options输入clean install -Dmaven.test.skip=true -Ptest意思是:排除测试的包内容,使用后缀为test的配置文件

Post Steps:选Run only if build succeeds,点击Add post-build step,选择 Send files or execute commands over SSH:
Source files:target/myproject-web-0.0.1-SNAPSHOT.jar # 项目jar包在 jenkins workspace中的相对路径 如果你是多pom项目 请到~/.jenkins/workspace/myproject下 找到jar的相对路径
Remove prefix:target/ # 去掉前缀
Remote directory:myproject/jenkins/ # 代码应用服务器的目录地址
Exec command:myproject/run.sh # 应用服务器对应的脚本

来到应用服务器,创建文件~/myproject/run.sh,复制下面内容到run.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DATE=$(date +%Y%m%d%H%M%S)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/usr/java/jdk1.8.0_151/
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR=~/myproject
JARFILE=myproject-web-0.0.1-SNAPSHOT.jar

if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR

ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv $JARFILE backup/$JARFILE$DATE
mv -f jenkins/$JARFILE .
chmod a+x $JARFILE
java -jar $JARFILE > out.log &

if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi

cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf

这段脚本的意思是,kill之前在运行的jar包,备份旧的jar包,启动新的jar包,保留最新的5个删除其他的旧的jar包