前言
在安装之前,我想说明一下本文的目的,jenkins的一款持续集成工具,
它可以做的事情很多,其中一个主要的功能就是简化部署流程
回想一下我们的发布流程:
1.本地把项目打包
2.通过FTP等工具,传输到服务器
3.然后到项目根目录下执行可运行jar, java -jar xxxxxx.jar
如果每次都这么搞的话,不仅慢,而且容易出错。
有了jenkins以后,发布流程可以是这样:
1.用户在jenkins上点击某个按钮进行发布
2.jenkins收到发布命令
3.jenkins从SVN上把源代码download下来
4.jenkins根据你设置的mvn命令进行打包
5.jenkins把你打包的好的可执行jar工程通过SSHserver传输到服务器工作目录下
6.自动执行shell脚本启动项目
对于程序员而言,只要做两件事:
1.在jenkins上配置某个项目的部署流程
2.在jenkins上点击某个项目的部署按钮,进行一键部署
实际上,配置往往只做一次,其余的时候,你只要一键部署就可以了
第一步,搭建svn资源服务器,可以参考我的另一篇博客
第二步, 搭建jenkins环境,可以参考我的另一篇博客
第三步,jenkins安装插件
1 , 安装maven插件
2 , 安装svn插件
3 , 安装deploy插件
deploy插件安装完成后,会在项目构建配置中出现Send build artifacts over SSH 选项
第四步, 配置jdk,maven,publish SSH server
1 , publish SSH server , passphrase 为密码授权
2, jdk and maven
这里在配置maven本地仓库的时候, 可能会遇到无法从远程仓库下载jar包到本地仓库,研究了半天发现是jenkins根据maven配置文件去下载jar包的时候需要在服务器上建立文件目录. 但是jenkins默认的用户并没有权限在linux建立目录, 解决方法把jenkins的用户设置为linux的root用户,就可以成功建立本地仓库了.
vi /etc/sysconfig/jenkins 可以配置jenkins的用户和端口
第五步 , 设置项目构建,按截图顺序设置
构建后操作, 如果打的是pom文件, 则exec command为
echo "======$JOB_NAME"
echo "======$JOB_BASE_NAME"
echo "======$NODE_NAME"
如果打的是可运行jar包,则exec command 为:
BUILD_ID=DONTKILLME
source /etc/profile
PJ_DIR=mgt-franchise
FILE_NAME=`ls /work/update/$PJ_DIR -t | awk '{print $1}' | head -1`echo "--find filename: $FILE_NAME"
CURR_DATE=`date "+%Y%m%d%H%M%S"`
cd /work/services/
tar -zcf /work/backup/$PJ_DIR/$CURR_DATE.gz $PJ_DIR*/*
rm -rf /work/services/$PJ_DIR*
tar -zxf /work/update/$PJ_DIR/$FILE_NAME -C /work/services
APP_DIR=/work/services/${FILE_NAME%-*}
echo "--app dir: $APP_DIR"
$APP_DIR/bin/restart.sh test
到此,jenkins一键自动化部署的过程就结束了,自动部署的时候需要一定的shell脚本编写能力,以后有时间再慢慢研究...
linux consul安装和启动
unzip consul_0.6.4_darwin_amd64.zip
sudo scp consul /usr/local/bin
consul agent -client -dev
consul members
最后,记一次我在用springcloud+consul做分布式服务遇到的一个问题, 我们的项目是用consul来做分布式服务注册和治理的,所以项目启动的时候需要连接consul服务 , 我开始是用server的方式启动consul
consul agent -server -bootstrap -advertise 127.0.0.1 -data-dir ./data -client 192.168.1.142 -ui
-client参数设置客户端应用连接consul服务的地址,但consul肯定是以服务器模式启动的