赞
踩
目录
之前也接触写了好几篇Jenkins的博客,但是自己使用最新版本的Jenkins【2.339版本】,然后去发布Spring boot项目,发现还是花了自己不少的时间,所以记录一下。整理一下遇到的问题:
1、还是对Jenkins的整体不熟悉,安装时选择默认插件安装,结果默认中并没有 Publish Over SSH 1.2.4插件,还以为是Jenkins的版本变动比较大,浪费了很多时间;
2、对shell脚本不熟悉,导致来回调了很久;
直接使用命令安装(省略安装Docker的部分):
- docker run \
- -u root \
- --rm \
- -d \
- -p 8300:8300 \
- -p 50000:50000 \
- -v jenkins-data:/var/jenkins_home \
- -v /var/run/docker.sock:/var/run/docker.sock \
- jenkinsci/blueocean
查看docker镜像信息:docker images
启动镜像:docker run -d -p 8300:8300 jenkinsci/blueocean
也可以增加jvm参见进行启动:
- docker run -d -p 8300:8300
- -e JAVA_OPTS='-Dfile.encoding=utf-8 -server -XX:+UseG1GC -Xms256m -Xmx256m'
- jenkinsci/blueocean
查看是否启动,可以执行ps -ef|grep 8300或jenkins ; 或者执行命令 docker ps -a
直接下载文档版本的 jenkins.war包,可以在选择对应的版本
http://updates.jenkins-ci.org/download/war/
如:https://updates.jenkins-ci.org/download/war/2.339/jenkins.war
浏览器访问:http://ip:8300
需要输入密码,则在启动日志或者对应的文件中查看,如果不好找也可以搜索文件位置,使用:
find / -name initialAdminPassword
点击安装插件
请一定注意需要安装 Publish over SSH插件,安装完成后可以看到:
然后在 Configure System 配置ssh server,然后在项目job创建时可以直接使用插件的服务,如下:
需要在Jenkins的管理菜单,进入工具管理进行配置:
Maven也已经安装了,这里需要设置 setting.xml的配置文件地址,服务部署时的配置文件,将其放到服务器中的 /home/kevin/maven/setting.xml, 则:
JDK jenkins所在的服务器本身安装了jdk,查看jdk可以使用
whereis jdk
并查看jdk信息如下:
所以配置地址为:/usr/local/jdk/jdk1.8
Git git一般都没有安装可以先看jdk是否有镜像存在
yum list git
yum -y install git
最后查看git版本: git --version
以及查看git的安装地址:whereis git
最后,在jenkins上进行配置:
Jenkins允许将项目使用 视图(VIEW)或 文件夹以将所有要发布的项目进行隔离,如下:
现在直接在 mosty-framework下创建 mosty单体项目(Freestyle project或maven项目都可以):
继续先为gitlab创建账号、密码:
继续项目基础信息配置:
继续配置代码拉去地址:
配置maven打包的位置和命令,如果是maven子项目时需要增加对应的路径:
继续【构建】部分
下面就是在 Publish over SSH中编写脚本等的时候了,这个时候分为两种情况,一种是直接将spring boot打成jar包,然后在服务器端进行启动;另一种是推包过去在服务器端打成 docker镜像再启动
在基础配置中,选择参数构建,选择字符串类型,填入对应的参数配置
在git配置中选择分支部分,使用参数进行代替,如下:
构建时样式:
需要先按照 git paramter插件:
配置构建参数:
git地址配置时,分支选项使用参数代替:
构建时的样式:
Publish Ssh over的执行脚本见下面,当前配置的ssh server的服务器地址为: /home/mosty/project/workspace
Shell脚本说明(这里还需要注意,及时jdk设置了环境变量,在服务器任何地方都可以使用 java -jar命令启动,但是脚本这里也要写 java的具体路径,如下):
- echo "Stopping SpringBoot Application"
- JAR_FILE=mosty-1.0.0-SNAPSHOT.jar
- BASE_PATH=/home/mosty/project/mosty
- PID=ps -ef | grep $JAR_FILE | grep -v grep | awk '{print $2}'
- echo $PID
- echo "--------kill start--------------"
- if [ -n "$PID" ]
- then
- echo "kill -9 的pid:" $PID
- kill -9 $PID
- fi
- echo "--------kill finish-----------------"
-
- echo "--------replace start--------------"
- DATE=$(date +%Y%m%d%H%M%S)
- JAR_FILE_PATH="/home/mosty/project/mosty/$JAR_FILE"
- if [ -f "$JAR_FILE_PATH" ]; then
- mv $BASE_PATH/$JAR_FILE /home/mosty/project/workspace/bak/$JAR_FILE.$DATE.bak
- fi
- mv /home/mosty/project/workspace/$JAR_FILE $BASE_PATH/
- echo "--------replace finish-----------------"
-
- echo "Execute shell Finish"
- chmod 777 $BASE_PATH/mosty-1.0.0-SNAPSHOT.jar
- echo "修改jar包权限为 777 "
-
- echo "Executing program….."
- nohup /usr/local/jdk/jdk1.8/bin/java -server -Dfile.encoding=UTF-8 -Xms256m -Xmx256m -XX:+UseG1GC -jar $BASE_PATH/$JAR_FILE --spring.config.location=$BASE_PATH/application.yml $BASE_PATH/nohup.log 2>&1 &
-
- sleep 15s

执行完脚本后不需要等管道直接返回成功,可以选择:
Publish Ssh over的执行脚本,其中Dockerfile 和 docker.sh 参见下面部分;当前配置的ssh server的服务器地址为: /home/mosty/project/workspace
Shell脚本说明
- echo "jenkins开始部署"
- IMAGE_NAME=mosty-jar
-
- echo "--------replace start--------------"
- DATE=$(date +%Y%m%d%H%M%S)
- JAR_FILE="/home/mosty/project/mosty/$JAR_FILE"
- if [ -f "$JAR_FILE" ]; then
- mv /home/mosty/project/mosty/$JAR_FILE /home/mosty/project/workspace/bak/$JAR_FILE.$DATE.bak
- fi
- mv /home/mosty/project/workspace/$JAR_FILE /home/mosty/project/mosty/
- echo "--------replace finish-----------------"
-
- chmod 777 /home/mosty/project/mosty/mosty-1.0.0-SNAPSHOT.jar
- echo "修改jar包权限为 777 "
-
- echo '================获取容器id=================='
- CID=$(docker ps | grep "$IMAGE_NAME" | awk '{print $1}')
- echo 容器id=$CID
-
- echo '================获取镜像id=================='
- IID=$(docker images | grep "$IMAGE_NAME" | awk '{print $3}')
- echo 镜像id=$IID
-
- if [ -n "$CID" ]; then
- echo 存在$IMAGE_NAME容器,停止容器并删除
- docker stop $CID
- docker rm $CID
- fi
- docker build -t $IMAGE_NAME -f Dockerfile .
- echo 已经构建$IMAGE_NAME的镜像
- sh /home/mosty/project/mosty/docker.sh

Dickerfile脚本表简单:
- FROM java:8
- VOLUME /tmp
- ADD mosty-1.0.0-SNAPSHOT.jar app.jar
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
docker.sh 脚本,和脚本说明:
- docker run -d -p 9999:9999
- -e JAVA_OPTS='-Dfile.encoding=utf-8 -server -XX:+UseG1GC -Xms256m -Xmx256m -XX:+PrintGC -XX:+PrintGCTimeStamps'
- -v /home/mosty/project/mosty/application.yml:/application.yml mosty-jar
end!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。