假设:
- 一台SVN服务器
- 一台装了jboss的服务器
- 一台服务器做自动部署
步骤:
自动部署服务器上装jenkins
- http://www.jenkins.io下载jenkins.war,放到自动部署服务器上~/ci/
- 设置JENKINS_HOME,默认为~/jenkins/
- 启动jenkins
nohup java -jar jenkins.war --httpPort=8888 >> ~/ci/jenkins.log 2>&1 &
- 安装jenkins SSH Plugin插件 (https://wiki.jenkins-ci.org/display/JENKINS/SSH+plugin)
可访问外网用在线方式:系统管理->管理插件->可选插件->安装SSH plugin
内网用离线方式:下载 ssh.hpi http://updates.jenkins-ci.org/latest/ssh.hpi ,改名为ssh.jpi,放入$JENKINS_HOME/plugins/
- 重启jenkins使插件生效 http://x.x.x.x:8888/restart,重启后在add post-build step中将可以看到remote ssh选项
- 配置jenkins使用的jdk,maven,remote ssh等
配置jenkins服务器和java应用服务器之间的public key authentication ssh,用于免密码scp
- 在jenkins服务器~目录下生成公私钥对
ssh-keygen -t rsa #生成公私钥对 ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub
- 把jenkin服务器上生成的公钥~/.ssh/id_rsa.pub复制到java应用服务器的~/.ssh目录
- 在java应用服务器上,把公钥加入可信列表
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
#chmod 600 ~/.ssh/id_rsa
- 删了java应用服务器上的公钥
rm ~/.ssh/id_rsa.pub
配置jenkins job(这里是maven project)
- SVN check out
- maven build
clean install -Pdev -DskipTests=true
- execute shell,把war包scp到应用服务器
scp ~/.m2/repository/com/demo/gateway/1.0.0/gateway-1.0.0.war app@172.17.140.11:/home/app/gateway.war
- execute shell on remote host using ssh,ssh到应用服务器,部署并重启jboss服务器
home_path=/home/app
server_path=$home_path/servers/jboss
deploy_path=$server_path/standalone/deployments
cd $deploy_path
rm -rf gateway.war
mkdir gateway.war
cd gateway.war
cp $home_path/gateway.war ./
$JAVA_HOME/bin/jar xvf gateway.war
rm gateway.war
nohup $server_path/bin/xxx.sh stop > /dev/null 2>&1 &
sleep 5
nohup $server_path/bin/xxx.sh start > /dev/null 2>&1 &
现在,只要在jenkins上执行job就能进行自动部署了
来源:oschina
链接:https://my.oschina.net/u/1452390/blog/660357