Jenkins+Maven+Git 生成jar包部署到远程服务器上

1、登录Jenkins

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第1张图片

1.1 输入用户名/密码,登录Jenkins进入系统页面

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第2张图片

 2、创建任务

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第3张图片

2.1 点击左侧菜单中 “新建Item” 进入到新项目创建页面,创建一个新的构建任务

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第4张图片

2.2 在任务创建页面,第一步,“输入一个任务名称”;第二步,任务类型点击“构建一个maven项目”;第三步,点击“确定”,此时,构建任务创建完成。

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第5张图片

 2.3 任务创建完成后,系统页面自动跳转到任务配置页面;

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第6张图片

 2.4 此时,在Jenkins首页可以看到刚刚创建的名称为les-service的构建任务,点击任务名称后面的下拉箭头,点击“配置”可以进入到步骤2.2中的构建任务配置页面。

 3 构建任务配置

3.1 General(全局配置):以下(1)(2)(3)(4)(5)操作都为非必输项,可以忽略掉,不影响任务的构建。

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第7张图片

(1)描述:输入要部署到的远程服务器的信息,以及本次发布架包的信息;

(2)勾选Discard old builds(丢弃旧的构建版本),我这里要设置丢弃旧的构建版本信息;

(3)策略,选择Log Rotation(日志循环);

(4)“保持构建天数”中输入7,表示构建记录保存7天;

(5)“保持构建的最大个数”中输入7,表示最多保存7个构建记录;

 3.2 源码管理:主要填写GitLab上的项目源码信息

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第8张图片

(1)勾选Git;

(2)输入“Repository URL”内容,填写GitLab上项目的仓库地址,如下GitLab截图中的序号2,复制地址输入到“Repository URL”中;

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第9张图片

(3)点击Credentials下面的“添加”按钮,添加访问仓库项目的凭证(账号/密码),Domain(范围)选择“全局凭据”,后面创建该项目的前端构建任务时,可以复用;类型选择“Username with password”;“用户名”输入有访问该gitlab项目权限的用户名;“密码”用户的密码;点击下方“添加”按钮,凭据添加完成;

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第10张图片

(4)选择Credentials访问仓库项目的凭证(gitlab用户名/密码)

(5)输入,GitLab上的分支,我这里是dev分支

 3.3 构建环境,非必填项;勾选“Provide Configuration files”和“Add timestamps to the Console Output”,选择File和输入Target,target输入要被替换的路径以及文件名称,路径写相对路径(即,构建项目包里面文件夹的路径);如果要替换多个文件,点击“Add file”继续添加文件

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第11张图片

(1) 勾选“Provide Configuration files”(提供配置文件),可以替换构建包中配置文件,方便数据库、注册中等地址的修改,file的添加在 Dashboard-》Manage Jenkins-》Managed files中;

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第12张图片

(2)点击"Add a new Config"添加一个新配置,选择“Cutom file”自由风格的文件(这个可以自由定义配置文件的扩展名),点击“Next”

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第13张图片

 (3)“name”中输入配置文件的名称(随便取名,最好和项目中的一致方便识别),“Content”输入配置文件的内容,点击“Subimit”;Jenkins+Maven+Git 生成jar包部署到远程服务器上_第14张图片

3.4 Build构建,填写打包相关的信息

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第15张图片

(1)Root POM,输入POM的根路径,根据项目的实际路径填写;

(2)Goals and options,目标选项中输入打包要执行的maven命令,输入clean package -Dmaven.test.skip=true(先清理掉以前的包,并跳过测试打包,这里可以打war包或jar包,存放在target目录下)

小扩展:-DskipTests 和 -Dmaven.test.skip=true 的区别

-DskipTests:不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下;

-Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类;

 3.5 post step 构建后操作(pre step构建前操作)

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第16张图片

(1)我这里选择“Run regardless or build result”,表示不管上面构建结构都运行(此处根据自己情况也可以选择其他选项);

(2)点击“Add post-build step”,增加构建够操作;

(3)选择“Send files or execute commands over SSH”,通过SSH发送文件或执行命令,弹出到传输设置信息

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第17张图片

(4)name:选择一个要运行jar包的远程服务器;远程服务器配置如下3.5.1:

(5)Source files:jenkins工作目录下,打包好的jar包文件的路径,这里要写相对路径,开始不要加斜杠“/”(/var/lib/jenkins/workspace/les_service/ 下面的路径);

(6)Remove prefix:去掉Source file中的前缀;

(7)Remote directory:jar包要部署的远程服务器上位置的路径;

(8)Exec command:要执行的shell脚本

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第18张图片

(9)点击“Add Transfer Set”可以添加多个jar传到服务器;

(10)在最后一个jar传输信息的Exec command中的shell命令框中 可执行命令的最上面加上 ./etc/profile 重新加载下环境变量,解决脚本不执行或找不到环境变量问题 ;

./service.sh为执行命令脚本文件,把service.sh脚本和jar放在同一文件夹下,

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第19张图片

service.sh内容为:

#!/bin/sh
export GATEWAY=les-gateway.jar
export AUTH=les-auth.jar
export WMS=modules-wms-system.jar
export MASTERDATA=les-modules-masterData.jar
export LES=modules-les-system.jar
export JOB=les-modules-job.jar
export FILE=les-modules-file.jar

export GATEWAY_port=8080
export AUTH_port=9205
export WMS_port=9201
export MASTERDATA_port=8085
export LES_port=9203
export JOB_port=9211
export FILE_port=9300

case "$1" in

start) 
        ## 启动gateway
        echo "--------开始启动GATEWAY---------------"
        nohup java -jar $GATEWAY >/dev/null 2>&1 &
        GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$GATEWAY_pid" ]
            do
              GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "GATEWAY pid is $GATEWAY_pid"    
        echo "---------GATEWAY 启动成功-----------"
 
        ## 启动auth
        echo "--------开始启动AUTH---------------"
        nohup java -jar $AUTH >/dev/null 2>&1 &
        AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$AUTH_pid" ]
            do
              AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "AUTH pid is $AUTH_pid"     
        echo "---------AUTH 启动成功-----------"

		## 启动MASTERDATA
        echo "--------MASTERDATA 开始启动--------------"
        nohup java -jar $MASTERDATA >/dev/null 2>&1 &
        MASTERDATA_pid=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$MASTERDATA_pid" ]
            do
              MASTERDATA_pid=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "MASTERDATA pid is $MASTERDATA_pid" 
        echo "--------MASTERDATA 启动成功--------------"
 
        ## 启动LES
        echo "--------开始启动LES---------------"
        nohup java -jar $LES >/dev/null 2>&1 &
        LES_pid=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'` 
        until [ -n "$LES_pid" ]
            do
              LES_pid=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "LES pid is $LES_pid"      sleep 10
        echo "---------LES 启动成功-----------"
		
        ## 启动WMS
        echo "--------开始启动WMS---------------"
        nohup java -jar $WMS >/dev/null  2>&1 &
        WMS_pid=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$WMS_pid" ]
            do
              WMS_pid=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "WMS pid is $WMS_pid"     
        echo "---------WMS 启动成功-----------"
        			
        ## 启动FILE
        echo "--------开始启动FILE---------------"
        nohup java -jar $FILE >/dev/null  2>&1 &
        FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$FILE_pid" ]
            do
              FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "FILE pid is $FILE_pid"     
        echo "---------WMS 启动成功-----------"	
		## 启动JOB
        echo "--------开始启动JOB---------------"
        nohup java -jar $JOB >/dev/null  2>&1 &
        JOB_pid=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$JOB_pid" ]
            do
              JOB_pid=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "JOB pid is $JOB_pid"     
        echo "---------JOB 启动成功-----------"
        
        echo "===startAll success==="
        ;;

 stop)
        
         P_ID=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===GATEWAY process not exists or stop success"
        else
            kill -9 $P_ID
            echo "GATEWAY killed success"
        fi
         P_ID=`ps -ef | grep -w $FILE| grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===FILE|  process not exists or stop success"
        else
            kill -9 $P_ID
            echo "FILE|  killed success"
        fi
         P_ID=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===AUTH process not exists or stop success"
        else
            kill -9 $P_ID
            echo "AUTH killed success"
        fi
         P_ID=`ps -ef | grep -w $WMS | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===WMS process not exists or stop success"
        else
            kill -9 $P_ID
            echo "WMS killed success"
        fi

	 P_ID=`ps -ef | grep -w $MASTERDATA | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===MASTERDATA process not exists or stop success"
        else
            kill -9 $P_ID
            echo "MASTERDATA killed success"
        fi
        P_ID=`ps -ef | grep -w $LES | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===LES process not exists or stop success"
        else
            kill -9 $P_ID
            echo "LES killed success"
        fi
		P_ID=`ps -ef | grep -w $JOB | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===JOB process not exists or stop success"
        else
            kill -9 $P_ID
            echo "JOB killed success"
        fi
		
        echo "===stop success==="
        ;;   
 
restart)
        $0 stop
        sleep 2
        $0 start
        echo "===restart success==="
        ;;   
esac    
exit 0

3.5.1 SSH私钥公钥配置

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第20张图片

1、生成私钥和公钥,在Jenkins服务器下输入 ssh-keygen -t rsa

2、一路回车,可以看到私钥id_rsa 和 公钥id_rsa.pub 生成在/root/.ssh/文件夹下

3、把私钥id_rsa中的内容放在Jenkins中,公钥id_rsa.pub的内容放在远程服务器上的authorized_keys文件中

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第21张图片

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第22张图片

(1)把私钥id_rsa的内容复制到 Jenkins中,Dashboard->Manage Jenkins->Configure System 中的key下;Path to key下填写私钥的路径;

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第23张图片

(2)在 Jenkins的Dashboard->Manage Jenkins->Configure System中配置远程服务器信息;信息配置完成后,点击“Test Configuration”测试连接情况,弹出“Success”说明配置成功

 name:服务器名称(根据自己习惯填写即可)

Hostname:服务器IP地址

Username:服务器登录用户名

Remote Directory:远程服务器上要部署包存放的位置(这里可以不填,在Jenkins任务的配置中填写也行,个人建议在任务的配置中填写,因为一个服务器可能部署多个包到多个位置)

(3)公钥id_rsa.pub放在远程服务器上的authorized_keys文件中,如果找不到authorized_keys这个文件,就在/root/.ssh/ 文件夹下创建这个文件,如果在远程服务器上找不到/root/.ssh/这个文件夹,直接在远程服务器上执行一下 ssh-keygen -t rsa,然后cd /root/.ssh/ 进入到该文件夹下执行 touch authorized_keys 创建authorized_keys文件,把公钥id_rsa.pub里的内容复制到authorized_keys文件中。

3.6 完成配置

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第24张图片

 上述全部配置完成后,点击“保存”按钮,完成配置;

3.7 构建

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第25张图片

 点击如图所示进行构建;

3.8 构建日志查看

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第26张图片

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第27张图片

(1)构建过程中的任务,直接点击左下角的进度条便可进入到控制台实时查看日志 

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第28张图片

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第29张图片

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第30张图片

Jenkins+Maven+Git 生成jar包部署到远程服务器上_第31张图片 (2)也可以直接点击 任务名称—》构建信息—》控制台输出,查看日志信息

你可能感兴趣的:(jenkins,maven,git)