当前位置: 代码迷 >> 综合 >> springCloud实现自动化部署
  详细解决方案

springCloud实现自动化部署

热度:14   发布时间:2024-03-10 02:06:29.0

搭建自动化部署过程

  • 1.使用工具
  • 2.自动化部署流程图
  • 3.在linux上安装Docker
    • Docker 的三大核心概念:镜像,容器,仓库
    • 安装Docker
      • (未安装过的,已安装过的检查docker更新,或者卸载旧的后在安装新的)
    • 使用Docker搭建Jenkins
      • 拉去Jenkins镜像
      • 将docker工作目录对外挂载
      • 对此目录开放权限
      • 启动docker容器
      • 运行成功后访问Jenkins
      • 查看日志获取初始密码
      • 页面进入成功后
      • 安装完成后
      • 安装自动化部署需要的插件
        • 进入系统管理-插件管理
      • 添加凭据(管理你的服务器登录名密码,gti的登录名密码等信息)
      • 配置SSH remote hosts
      • 全局工具配置
        • 安装JDK
        • 安装git
        • 安装maven
        • 安装Docker
      • 3.Linux下安装Harbor
        • 3.1首先安装docker-compose
        • 3.2下载harbor压缩包
    • 4新建Jenkins任务
        • 源码管理
      • 构建触发器
        • Gogs仓库配置
      • 构建环境
        • Pre Steps
      • Build(构建)
      • Post Steps(执行任务)

1.使用工具

Jenkins + docker + git + maven + harbor + linux

2.自动化部署流程图

自动化部署流程图

3.在linux上安装Docker

Docker 的三大核心概念:镜像,容器,仓库

镜像:类似虚拟机的镜像,也可理解为springBoot 打的jar包
容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可理解为tomcat
仓库:类似代码仓库,gitLab之类的,是Docker集中存放镜像文件的场所

安装Docker

(未安装过的,已安装过的检查docker更新,或者卸载旧的后在安装新的)

首先检查linux内核版本,版本大于3.10即可
在这里插入图片描述
执行安装命令:
下面展示一些 内联代码片

$yum install -y docker-engine

如果提示报yum的错误,可能你需要先安装yum

安装命令结束后;使用

$docker --version

查看是否安装成功及查看docker相关信息
在这里插入图片描述
安装成功后启动Docker

systemctl start docker

设置开机启动(我是部署在linux服务器上,一般是不会关服务器的)

sudo systemctl enable docker

关闭docker

systemctl stop docker

查看docker服务

docker ps

查看Docker的运行状态

systemctl status docker

使用Docker搭建Jenkins

拉去Jenkins镜像

进入Jenkins官网


在这里插入图片描述
使用红框内的命令

将docker工作目录对外挂载

mkdir -p /apps/devops/jenkins

对此目录开放权限

chmod 777 /apps/devops/jenkins

权限开启遇到问题是执行开启最高权限

启动docker容器

(将Jenkins镜像在docker容器里启动)

docker run -itd -p 9003:8080 -p 9004:50000  --restart always -v /apps/devops/jenkins:/var/jenkins_home --name jenkins  jenkins/jenkins:lts

运行成功后访问Jenkins

http://192.168.xxx.xxx:9003
如上述过程没有问题会出现如下页面,代表jenkins运行成功

在这里插入图片描述

查看日志获取初始密码

docker logs -f jenkins

在这里插入图片描述

将红框内的内容复制到输入框内,点击继续,此时页面会进去加载页面(可能会加载很长时间)


如果加载时间过长
修改/apps/devops/jenkins/ 下的hudson.model.UpdateCenter.xml文件

vi hudson.model.UpdateCenter.xml

将将文件hudson.model.UpdateCenter.xml中https://updates.jenkins.io/update-center.json改成http://updates.jenkins.io/update-center.json(把https改成http)
在这里插入图片描述
保存后重启Jenkins容器,
重新进入Jenkins页面


页面进入成功后

在这里插入图片描述
选择《安装推荐的插件》
安装过程会很长,会存在部分插件安装失败的现象(可选择重启Jenkins或者重新下载插件来解决)
在这里插入图片描述
插件全部安装成功后:
在这里插入图片描述
创建第一个用户
保存完成后进入下一个页面

在这里插入图片描述
这里设置的这个URL涉及到git触发部署请求,gitlab,gitHub,gitee.不支持直接用地址+端口的形式,要求使用域名形式,后面的涉及到git自动触发事件的改用其他插件

安装完成后

出现此页面代表Jenkins已经安装完成
在这里插入图片描述
修改Jenkins的系统时间
在这里插入图片描述
输入下面命令,出现Result则运行正常

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

在这里插入图片描述

安装自动化部署需要的插件

所需插件:【Maven Integration】、【Pipeline Maven Integration】、【Gitlab】、【Gitlab hook】、【SSH】、【Publish Over SSH】

进入系统管理-插件管理

在这里插入图片描述
在这里插入图片描述
安装过程页面如下(如果出现安装插件失败的,重启Jenkins,在搜索下载)
在这里插入图片描述
待所有插件安装完成后重启Jenkins(在你访问Jenkins页面地址上加/restart)
在这里插入图片描述

添加凭据(管理你的服务器登录名密码,gti的登录名密码等信息)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置SSH remote hosts

系统管理-系统配置下
在这里插入图片描述
在这里插入图片描述

全局工具配置

需要安装JDK,maven,git,docker。
打开系统管理-全局工具配置下

安装JDK

在这里插入图片描述

安装git

在这里插入图片描述

安装maven

在这里插入图片描述

安装Docker

如果没有这个选项
需要到插件管理下安装:docker-build-step 这个插件,插件安装完成后重启Jenkins,之后再来安装Docker。在这里插入图片描述

待所有的配置都完成后重启Jenkins

3.Linux下安装Harbor

3.1首先安装docker-compose

[root@topcheer ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    382      0 --:--:--  0:00:01 --:--:--   383
100 15.4M  100 15.4M    0     0  35739      0  0:07:32  0:07:32 --:--:-- 62373
[root@topcheer ~]# chmod +x /usr/local/bin/docker-compose
[root@topcheer ~]# docker-compose

3.2下载harbor压缩包

百度网盘下载harbor压缩包
解压:

tar   -zxvf   harbor-offline-installer-v1.8.0.tgz  

安装

# 执行  ./prepare
./prepare
?
?
# 执行 ./install.sh
./install.sh# 查看启动情况docker-compose ps
?
[root@topcheer harbor]# docker-compose psName                     Command                  State                 Ports
---------------------------------------------------------------------------------------------
harbor-core         /harbor/start.sh                 Up (healthy)
harbor-db           /entrypoint.sh postgres          Up (healthy)   5432/tcp
harbor-jobservice   /harbor/start.sh                 Up
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp
harbor-portal       nginx -g daemon off;             Up (healthy)   80/tcp
nginx               nginx -g daemon off;             Up (healthy)   0.0.0.0:80->80/tcp
redis               docker-entrypoint.sh redis ...   Up             6379/tcp
registry            /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp
registryctl         /harbor/start.sh                 Up (healthy)
[root@topcheer harbor]#

安装完成后访问:
http://地址/harbor/sign-in
默认账户名密码
admin/Harbor12345
在这里插入图片描述
新建项目后查看 推送镜像地址
修改jenkins中ssh命令(修改为新建仓库的推送命令)
在这里插入图片描述

修改配置文件

vi /etc/docker/daemon.json# 加上 允许的仓库
{"insecure-registries":["192.168.xxx.xxx"]
}

重启:

docker-compose restart

测试推送镜像:
[root@docker02appl]# docker login 192.168.xxx.xxx
Username(admin): admin
Password:
Login Succeeded
显示登录成功,如果失败,修改配置文件
执行推送命令
查看自己有哪些镜像;docker images
把需要上传到Harbor的镜像运行如下命令就可以了
#镜像打标签
[root@centos7 ~]#docker tag 镜像名:标签 私服地址/仓库项目名/镜像名:标签

#推送到私服
[root@centos7 ~]#docker push 私服地址/仓库项目名/镜像名:标签

#从私服拉取镜像
[root@centos7 ~]#docker pull 私服地址/仓库项目名/镜像名:标签

4新建Jenkins任务

1.任务名称一般以项目名称命名,经测试不能包含大写字母(启动镜像时会报错)
在这里插入图片描述

源码管理

配置git信息
点击确定后进入项目配置页面,输入git项目的克隆地址(HTTP格式),选择要搭建的项目分支
在这里插入图片描述
配置git时添加git的账户登录信息,填写方式及内容同上面维护服务器信息
在这里插入图片描述
在这里插入图片描述

构建触发器

开发每次推送代码到仓库时(git push),都需要执行一次构建
使用管理员账号登录Jenkins后,在系统管理-》管理插件,搜索“Generic Webhook Trigger”后安装,顺利完成插件安装:
在这里插入图片描述
在这里插入图片描述

Gogs仓库配置

在这里插入图片描述
(2) 选择左侧菜单的“管理Web钩子”,选择右上角的“添加Web钩子”,下拉菜单展开后,选择Gogs:
在这里插入图片描述
(3)主要配置推送地址,例如
http://username:password@127.0.0.1:9003/generic-webhook-trigger/invoke?token=turtleErueka
页面底部有一个“测试推送”的按钮,点击按钮可以模拟一次推送(push request),然后检查Jenkins是否收到推送请求并处理:
在这里插入图片描述

构建环境

勾选 Add timestamps to the Console Output,可以看到控制台打印的信息,其他的选项可以按需勾选

Pre Steps

项目构建前进行的步骤
在这里插入图片描述

SERVER_NAME_1=platform-wuad
echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE "
cd $WORKSPACE
echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 "
rm -rf $SERVER_NAME_1
echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"

注意:本处的SERVER_NAME_1=platform-wuad 是配置项目的名称

Build(构建)

这里设置一下全局操作,clean项目,并打成jar包,所以这里输入:

clean package

选择要执行的pom文件,微服务项目要具体到每一个服务的pom文件
在这里插入图片描述

Post Steps(执行任务)

只在jenkins构建成功后,才执行这一步

因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker操作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器,这个根据自己的情况去配置

本处选择,在远程的SSH执行shell脚本

选中只有构建成功才执行这些命令,然后选择Execute shell script on remote host using ssh

在这里插入图片描述
运行脚本命令(根据不同服务做出一定的调整):

#=================================微服务项目======================================
#=====================================================================================
#=================================定义初始化变量======================================
#=====================================================================================# jenkins列表里的服务名:jenkins打包后的项目在此目录下
SERVICE_NAME=platform-wuad# 二级项目目录(工作手机有部分服务是多了一层路径)(安照服务实际目录选择使用)
SERVICE_NAME_ER=platform-server# jenkins构建好的源jar路径  
SOURCE_PATH=/apps/devops/jenkins/workspace#【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
#注意统一名称!!!!!(和pom文件里的名称一致)
#SERVER_NAME=springboot
SERVER_NAME=platform-wuad#操作/项目路径(Dockerfile存放的路劲)(可以自己设置路径)
BASE_PATH=/var/$SERVER_NAME#容器id  [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID]  [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')#镜像id  [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')#源jar完整地址  [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/target/"  -name "*$SERVER_NAME*.jar" )
# SOURCE_JAR_PATH = /apps/devops/jenkins/workspace/turtle-eureka/eureka-server/target/jar名DATE=`date +%Y%m%d%H%M%S`#=====================================================================================
#============================对原本已存在的jar进行备份================================
#=====================================================================================# 备份
function backup(){if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; thenecho "=========================>>>>>>>$SERVER_NAME.jar 备份..."mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jarecho "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"elseecho "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"fi
}#=====================================================================================
#============================  创建BASE_PATH  ================================
#=====================================================================================function makedir(){if [ ! -d "$BASE_PATH" ]; thenecho "=========================>>>>>>>>>>>$BASE_PATH 不存在,创建……"mkdir -p $BASE_PATHecho "=========================>>>>>>>>>>>$BASE_PATH 创建成功"elseecho "=========================>>>>>>>>>>>$BASE_PATH 已存在,跳过创建"fi
}#=====================================================================================
#============================  创建Dockerfile文件 ================================
#=====================================================================================function createfile(){if [ ! -f "$BASE_PATH/Dockerfile" ]; thenecho "======================>>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 不存在,创建……"cd $BASE_PATHecho "FROM java:8" > Dockerfileecho "MAINTAINER Wuad" >> Dockerfileecho "VOLUME /workspace" >> Dockerfileecho "ADD $SERVER_NAME.jar  $SERVER_NAME.jar" >> Dockerfileecho "ENTRYPOINT [\"java\",\"-jar\",\"$SERVER_NAME.jar\"]" >>Dockerfileecho "========================>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 创建成功"elseecho "=======================>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 已存在,跳过创建"fi
}#=====================================================================================
#=========================移动最新源jar包到Dockerfile所在目录=========================
#=====================================================================================# 查找源jar文件名,进行重命名,最后将源文件移动到项目环境
function transfer(){echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"echo "=========================>>>>>>>重命名源文件"mv $SOURCE_JAR_PATH  $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jarecho "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH"# cp $SOURCE_JAR_PATH/$SERVER_NAME.jar $BASE_PATH cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH echo "=========================>>>>>>>迁移完成Success"}#=====================================================================================
#==================================构建最新镜像=======================================
#=====================================================================================# 构建docker镜像
function build(){#无论镜像存在与否,都停止原容器服务,并移除原容器服务echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"docker stop $CIDecho "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"docker rm $CID#无论如何,都去构建新的镜像if [ -n "$IID" ]; thenecho "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"docker rmi $IIDecho "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"cd $BASE_PATHdocker build -t $SERVER_NAME .echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"elseecho "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"cd $BASE_PATHdocker build -t $SERVER_NAME .echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"fi
}#
function pushpull(){#标记
docker tag $SERVER_NAME:latest 192.168.99.25/testone/$SERVER_NAME:latest
echo "=========================>>>>>>>标记$SERVER_NAME镜像,完成---->"
#推送
docker push 192.168.99.25/testone/$SERVER_NAME:latest
echo "=========================>>>>>>>推送$SERVER_NAME镜像,完成---->"
# 删除本地
# docker rmi $IID
# docker rmi 192.168.99.25/testone/$SERVER_NAME:latest
# 拉去
# docker pull 192.168.99.25/testone/$SERVER_NAME:latest
}#=====================================================================================
#==============================运行docker容器,启动服务===============================
#=====================================================================================# 运行docker容器function run(){backupmakedircreatefiletransferbuilddocker run -d --name $SERVER_NAME -p 8888:8080  $SERVER_NAME }
#入口
run

最后点击应用,保存
点击立即构建,初次构建会加载很长时间

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
显示SUCCESS则构建成功