Jenkins - 单机和集群搭建、基于git分支部署spring boot项目(脚本、docker发布)、gitlab钩子部署【图文详解】

目录

Jenkins使用Docker方式安装

直接使用 Jenkins.war 启动

配置管理Jenkins

1、Jenkins原理和基本初始化

2、安装 Publish over SSH插件

3、安装和配置工具【jdk、git、maven】

4、配置项目 

5、基于git分支部署【可选项】

5-1)、输入框方式

5-2)、下拉选项方式 

6-1、脚本命令行部署

6-2、脚本Docker部署


之前也接触写了好几篇Jenkins的博客,但是自己使用最新版本的Jenkins【2.339版本】,然后去发布Spring boot项目,发现还是花了自己不少的时间,所以记录一下。整理一下遇到的问题:

1、还是对Jenkins的整体不熟悉,安装时选择默认插件安装,结果默认中并没有 Publish Over SSH 1.2.4插件,还以为是Jenkins的版本变动比较大,浪费了很多时间;

2、对shell脚本不熟悉,导致来回调了很久;

基于篇幅限制 钩子部署集群搭建部署 于其他文章中

Jenkins使用Docker方式安装

直接使用命令安装(省略安装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 启动

直接下载文档版本的 jenkins.war包,可以在选择对应的版本

http://updates.jenkins-ci.org/download/war/

如:https://updates.jenkins-ci.org/download/war/2.339/jenkins.war

  1. cd /home/kevin/
  2. mkdir jenkins
  3. cd jenkins
  4. 下载包:wget http://updates.jenkins-ci.org/download/war/2.339/jenkins.war
  5. 执行 java -jar jenkins.war

配置管理Jenkins

1、Jenkins原理和基本初始化

浏览器访问:http://ip:8300 

需要输入密码,则在启动日志或者对应的文件中查看,如果不好找也可以搜索文件位置,使用:

find / -name initialAdminPassword

点击安装插件

2、安装 Publish over SSH插件

请一定注意需要安装 Publish over SSH插件,安装完成后可以看到:

 然后在 Configure System 配置ssh server,然后在项目job创建时可以直接使用插件的服务,如下:

3、安装和配置工具【jdk、git、maven】

需要在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上进行配置:

4、配置项目 

Jenkins允许将项目使用 视图(VIEW)或 文件夹以将所有要发布的项目进行隔离,如下:

 现在直接在 mosty-framework下创建 mosty单体项目(Freestyle project或maven项目都可以):

 继续先为gitlab创建账号、密码:

 继续项目基础信息配置:

 继续配置代码拉去地址:

 配置maven打包的位置和命令,如果是maven子项目时需要增加对应的路径:

继续【构建】部分 

下面就是在 Publish over SSH中编写脚本等的时候了,这个时候分为两种情况,一种是直接将spring boot打成jar包,然后在服务器端进行启动;另一种是推包过去在服务器端打成 docker镜像再启动

5、基于git分支部署【可选项】

5-1)、输入框方式

在基础配置中,选择参数构建,选择字符串类型,填入对应的参数配置

 在git配置中选择分支部分,使用参数进行代替,如下:

构建时样式:

5-2)、下拉选项方式 

需要先按照 git paramter插件:

配置构建参数: 

 git地址配置时,分支选项使用参数代替:

 构建时的样式:

6-1、脚本命令行部署

Publish Ssh over的执行脚本见下面,当前配置的ssh server的服务器地址为: /home/mosty/project/workspace

Shell脚本说明(这里还需要注意,及时jdk设置了环境变量,在服务器任何地方都可以使用 java -jar命令启动,但是脚本这里也要写 java的具体路径,如下):

  1. 打印开始;定义jar包名字的变量;定义jar包的使用路径(即启动的位置);
  2. 使用p命令获取当前正在运行的该包的pid,如果pid存在则将进程杀死,这里使用了 -9,也可以去掉
  3. 由于publish over ssh配置的将包放到了 /home/mosty/project/workspace位置;此时先判断基础路径(即启动的位置)是否存在上次启动的包,如果有则将其使用日期进行修改,并将包mv到一个专门存放历史包的位置;再将推上来的包放到新的要启动的位置;
  4. 此时新的要启动的包,可能没有执行权限等,这里直接暴力的修改为 777权限(读写执行)
  5. 使用java -jar命令启动spring boot项目,这里增加了后台启动,jvm参数控制;
  6. 由于应该是使用了 nohup命令,此时直接退出的话,要不就是包启动了但是jenkins没有收到状态;要不就是jenkins显示成功了,但是包没有起来,此时需要sleep一定的时间并且在 Publish over SSH配置时勾选Exec in pty选项【见下图】
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

执行完脚本后不需要等管道直接返回成功,可以选择:

6-2、脚本Docker部署

Publish Ssh over的执行脚本,其中Dockerfile 和 docker.sh 参见下面部分;当前配置的ssh server的服务器地址为: /home/mosty/project/workspace

Shell脚本说明

  1. 定义docker镜像的名称
  2. 同上面一样将spring boot包上传,再将上次运行的包修改后放到一个专门存放历史版本的地方,最后将上传的包mv到需要运行的位置
  3. 修改待运行的jar包的权限为 777(可读写执行)
  4. 获取当前正在运行的docker的进程
  5. 如果有正在运行的docker,则先停止;再删除;
  6. 使用新的Spring boot jar包构建镜像(Dockerfile 与jar包当前为同一级目录)
  7. 运行 docker.sh脚本(也就是启动docker脚本,见下)
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 脚本,和脚本说明:

  1. -d 后台运行docke;
  2. -p 将 9999端口与docker的9999端口进行关联或挂载;
  3. -e 设置jvm参数
  4. -v 挂载linux的包到docker的跟目录,由于docker运行的目录不是当前目录,并且这样的话也能实现修改当前的 application.yml 优先级高于项目中的yml,方便修改后重启
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!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值