mac下git+maven+jenkins自动打包发布

  随着springboot+springcloud(dubbo)越来越多人使用,流行的微服务的概念越来越深入人心。分布式部署越来越复杂,给手动发布带来很大工作量。为了方便前期测试和后期线上部署更新,可使用Jenkins作为持续集成工具。

  mac下开发推荐使用homebrew管理软件包,使用方法可查考之前homebrew的安装方法。该步骤下默认maven和git都已安装好。

  1. 下载jenkins

  mac下:推荐使用命令brew install jenkins,或者直接到jenkins官网下载

brew install jenkins

  linux下:

1 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
2 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
3 yum install jenkins
4 sudo service jenkins start //启动jenkins服务

 

  2. mac下载完后,进入jenkins/libexec目录下可以看到jenkins.war文件,我的路径是/usr/local/homebrew/Cellar/jenkins/2.141/libexec。直接调用 java -jar jenkins.war也能直接运行默认端口好像也是8080。

java -jar jenkins.war --httpPort=8080

  3. 访问localhost:8080,即可打开管理页面,首次访问需找到initialAdminPassword中的密码填入即可。

  4. 初始化点击intsall suggested plugins安装默认的插件

  5. 创建用户,配置git、maven、jdk等插件信息

  

   1)maven配置

    

  

  2)jdk配置

  

 

   6. 创建任务,从git里拉取文件

  

  7. 设置构建期间maven命令,可指定多个命令。

  

  8. 编写shell命令,启动jar程序(war文件也是同理)。相关命令一并提供,可按需修改。

  

  stop.sh

#!/bin/bash

PID=$(ps -ef | grep system.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill $PID
fi

  replace.sh

#!/bin/bash

# 先判断文件是否存在,如果存在,则备份
file="/usr/local/auto_programs/system/system.jar"
source_path="/Users/chenlili/.jenkins/workspace/happy-mall/system/target"
echo replace is beginning
if [ -f "$file" ]
then
   echo backup is beginning
   cp $file /usr/local/auto_programs/system/backup/system-`date +%Y%m%d%H%M%S`.jar
fi
cp $source_path/system.jar $file

  start.sh

#!/bin/bash

JVM="-Xms100m -Xmx520m"
Log="/usr/local/auto_programs/system/logs/system-api.log"
output="/usr/local/auto_programs/system/logs/output"

java $JVM -jar /usr/local/auto_programs/system/system.jar  >$output 2>&1
tail -f $Log

  这里解释一下为何不在start.sh用nohup方式启动,因为痛过jenkins的shell命令启动此方法不生效。我没看过源码,但我猜测是jenkins的shell进程控制着start.sh的线程,当shell关闭后线程也会关闭。因为在jenkins的shell命令里设置nohup可保证start.sh进入后台执行。同时BUILD_ID=dontKillMe是设置返回值通知jenkins命令已执行,不然jenkins会一直空转不能正常结束任务。

  1)假如大家要分布式部署的话,可通过ssh的方式无密钥访问.

  提供一种简单的方式:jenkins的maven编译完成->执行shell命令->shell里将各个jar包分配到相应的机器上->在执行想要的启动命令。

  2)假如工程项目的根目录下有多个工程,可通过jenkins配置多个任务,在maven里配置编译需要的工程。

  3)jenkins也支持docker

 

posted @ 2018-09-12 11:33  请叫我CL2  阅读(319)  评论(0编辑  收藏  举报