IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Jenkins的部署以及spring boot项目(脚本、docker发布) -> 正文阅读

[系统运维]Jenkins的部署以及spring boot项目(脚本、docker发布)

目录

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!!!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:59:27  更:2022-03-24 01:00:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:52:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码