使用Jenkins实现spring boot项目自动部署,包括maven多模块项目


1.解锁Jenkins,查看密钥,将密钥复制到页面中,进入Jenkins

cat /var/lib/jenkins/secrets/initialAdminPassword

2.由于配置没有理解透,花了大把的时间来处理插件的问题,坑~~~

上一篇中centos中使用linux命令安装jenkins

中修改/var/lib/jenkins/updates/default 的时候需要替换很多东西:

updates.jenkins-ci.org/download  
全部替换成 
mirrors.tuna.tsinghua.edu.cn/jenkins
中间有1700多个

www.google.com -> www.baidu.com

如果插件下载慢就要检查这里了
----
项目重启的时候回将default 的内容重置
----- 

完美解决更新插件慢的问题!!!建议在下载插件之前修改好

3.中文转换


# 目录
Manage Jenkins -> Configure System -> Avaliable
搜索
Chinese
安装:
Localization: Chinese (Simplified)
重启
-----------------------------------------------------
要么下载
https://updates.jenkins.io/download/plugins/localization-zh-cn/
最新版本,hpi格式文件
上传hpi文件
Manage Jenkins -> Configure System -> Advanced -> upload plugins
重启

4.用户、插件、实例

图片
图片
图片

安装完成!!


5.配置

# 必备插件
Maven Integration:新建job时有maven项目可以选择;
Deploy to container:将war包部署到tomcat所在的服务器上;
Publish Over SSH:通过ssh推送文件,并可以执行shell命令
git、gitee、GitHub 等都需要安装
# jdk、maven、git配置
系统管理 -> 全局工具配置
maven配置中settings的位置:/usr/local/maven/conf/settings.xml
其他jdk、maven、git的路径可以按照之前按照的配置

需要注意的是git的配置:
Path to Git executable 
的值是
(命令whereis git的结果) + /bin/git
我安装的值是: /usr/local/git/bin/git
maven中配置settings.xml

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
图片
图片
图片
图片

6.使用Publish Over SSH插件来实现项目自动部署

server添加:系统管理 -> 系统配置 ,找到Publish over SSH,配置如下图
图片

新建任务流程如下图

图片
image.gif

(1).自定义分支,增加

image.gif

指定分支(为空时代表any) 内容修改成 */${profile}

图片

(2).项目继续配置:clean package -U -Pdev -Dmaven.test.skip=true

图片

(3).在 Post Steps 中 Add post-build step 选择 Send files or execute commands over SSH

图片

上面数字备注

1.server服务列表
2.git项目build之后的jar包位置,
  单模块项目时可以填:target/*.jar
  多模块项目时填项目入口的jar位置,比如:docker-mast-web/target/*.jar
3.在2中需要删除的前缀,比如:docker-mast-web/target
4.服务器中存放上面jar的位置
5.启动项目的脚本位置

(4).restart.sh

echo "stop服务开始"
pidlist=`ps -ef|grep docker-demo.jar | grep -v "grep"|awk '{print $2}'`
#ps -u $USER|grep "Java"|grep -v "grep"
if [ "$pidlist" = "" ]; then
        echo "no jenkins-demo pid alive"
else
        echo "jenkins-demo Id list :$pidlist"
        for pid in ${pidlist}
        do
                kill -9 $pid
                echo "KILL $pid:"
                echo "service stop success"
        done
fi
echo "stop服务脚本结束"
echo "start服务脚本开始"
JAVA_HOME=/usr/local/jdk8
dir=/opt/jenkins_jars
cd $dir
mv docker-mast-web-0.0.1-SNAPSHOT.jar docker-demo.jar
echo dir=$dir
jar=$(find /lib -type f -name *.jar)
classpath=$dir/*:$dir/lib/*:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
echo classpath=$classpath
echo ---------------------------------------------

nohup $JAVA_HOME/bin/java -classpath $classpath -XX:-UseGCOverheadLimit -Xms1024m -Xmx2048m -jar $dir/docker-demo.jar  > $dir/log/$(date +'%Y%m%d').log &
echo "start服务脚本结束"

Linux中执行sh报错

bash: $’\r’: command not found

解决方法

yum install -y dos2unix
dos2unix restart.sh

推荐阅读更多精彩内容