DevOps实现自动化发布流程
本篇文章来自 B站视频(部分步骤与视频存在差异)
流程图及原理
- 本地编写代码
- 提交至远程仓库
- Jenkins(基于Docker)通过内置Git获取提交的代码,通过Maven进行打包,形成可执行文件,发送至目标服务器并执行启动命令
- 访问目标服务器查看效果
效果展示
- 查看目标服务器,并未启动java项目
- 访问Jenkins执行项目构建操作
- 查看目标服务器服务状态
准备步骤
- 准备两台虚拟机,安装CentOS-7系统
- 打通虚拟机与本机之间的网络,可供安装基础配置
- 建议所有操作都在root用户下进行,尽可能减少因为权限带来的问题。
- 文件的创建、修改、网络配置通常可以通过重启服务、刷新配置、重启容器、重启虚拟机解决
- 可能涉及到的命令(可以跳过)
#安装telnet命令
yum install telnet-server
#修改系统ip
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#重启网卡
service network restart
#设置linux启动默认用户
vim /etc/gdm/custom.conf
#在 [daemon]下添加
AutomaticLoginEnable=True
AutomaticLogin=root
#立即重启
reboot
#没有 docker-compose 命令的 需要安装一下
yum install docker-compose
#检查是否存在
docker-compose version
#上面不行就用下面的
docker compose version
#查看版本
docker -v
# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
#查看docker信息
docker info
# docker 服务开机自启动命令
systemctl enable docker.service
# 关闭docker 服务开机自启动命令
systemctl disable docker.service
#进入容器
sudo docker exec -i -t 镜像名称 /bin/bash
#退出容器
ctrl + P + Q
#停止容器内服务
docker compose stop
#启动容器内服务并后台运行
docker compose up -d
#查看日志
docker compose logs -f 镜像名称
#重启容器
docker compose restart
#查看容器内服务运行情况
docker ps
#强制删除镜像
docker rmi -f 镜像名称版本
192.168.1.8安装服务
-
安装yum工具
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
-
卸载、安装Docker
卸载dockeryum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce
配置本地镜像源
# 设置docker镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo # 更新缓存 也可以不执行 yum makecache fast
安装Dockeryum install -y docker-ce
-
修改Docker国内镜像源
vi /etc/docker/daemon.json #添加配置 { "registry-mirrors": ["http://hub-mirror.c.163.com"] }
-
配置开机自启docker
#设置开机自启dokcer systemctl enable docker.service
-
查看版本及docker信息
#查看docker版本 docker -v #查看docker信息 docker info
-
安装docker compose命令
yum install docker-compose
查看docker-compose版本docker compose version
-
下载Jenkins
视频中提到的版本有点低,所有的插件都安装失败,所以我采用了新版本docker pull jenkins/jenkins:2.4.0.1.2-lts
创建 文件夹 /usr/local/docker/jenkins_docker
编写 vim docker-compose.ymlversion: "3.1" services: jenkins: image: jenkins/jenkins:2.4.0.1.2-lts #声明镜像版本 container_name: jenkins #声明镜像名称 ports: - 8080:8080 #绑定端口 - 50000:50000 volumes: - ./data/:/var/jenkins_home/ #镜像数据存储地址
-
启动docker中的Jenkins 镜像
docker compose up -d
查看日志docker logs -f jenkins
发现没有权限
赋予文件夹 权限chmod -R 777 data
赋予权限后重新启动容器docker compose restart
查看日志,并保存Jenkins默认密码
访问Jenkins 服务
修改Jenkins下载插件地址
data/hudson.model.UpdateCenter.xml<?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url> </site> </sites>
重启镜像后选择安装自定义插件-全选-安装即可
创建用户-下一步-进入Jenkins
下载必备插件
下载以下两个插件 完成后并重启Git Parameter #用于Jenkins拉取代码 Publish Over SSH #用于将构建好的文件发送至目标服务器
查看已下载插件
至此docker、jenkins 、git已经安装完成 -
安装Maven
maven-Linux-地址
上传后解压至对应目录并 重命名为 maventar -zxvf apache-maven-3.9.3-bin.tar.gz -C /use/local mv apache-maven-3.9.3-bin.tar.gz maven
配置镜像仓库和编译插件
设置镜像仓库地址 setting 161行<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
设置编译插件 254行
<profile> <id>jdk8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
默认开启编译插件 276行
<activeProfiles> <activeProfile>jdk8</activeProfile> </activeProfiles>
-
安装JDK(可以不配置环境变量)
寻找你的运维同事或自行官网下载linux版本
上传后解压至对应目录并 重命名为 maventar -zxvf jdk-8u291-linux-x64.tar.gz -C /use/local mv jdk-8u291-linux-x64.tar.g jdk
-
将JDK和MAVEN配置进docker容器
根据之前的jenkins配置需要将jdk和maven移动至data目录下
切换到目录下查看
至此192.168.1.8所需服务已经安装完成
配置Jenkins全局配置
- 配置JDK
- 配置Maven
- 配置SSH连接信息
填写 对应的服务器信息,
请确保目标服务器路径文件夹已创建
添加完成后点击测试获取正确结果后,应用并保存
创建一个本地测试jar包(本地测试通过)
在pom文件中声明打包后的jar包名称
提交至git
在Jenkins创建项目管理并完成打包操作
-
创建项目
-
配置项目git地址
-
测试Jenkins拉取git项目文件
根据之前的git maven配置已经实现拉取代码和打包操作
配置构建完成后将文件发送至目标服务器并执行启动脚本(192.168.1.7)
- 选择在构建后执行通过SSH发送文件命令
- 选择之前配置好的全局配置中的 目标服务器配置,并选择需要发送的文件,这里使用的是通配符。
- 再次构建
查看日志显示发送成功
需要将目标服务器配置好运行环境jdk和jre均可 - 添加构建后执行脚本命令
# 启动程序
pid=`ps -ef|grep hxyTest.jar| grep -v grep | awk '{print $2}'`
# echo "部署前的pid进程 :$pid"
if [ -n "$pid" ]
then
kill -9 $pid
else
echo "开始部署!!!"
fi
sleep 1s
cd /home/work/hxytest/target/
nohup java -jar hxyTest.jar &
# echo "脚本执行完毕"
sleep 1s
pid=`ps -ef|grep hxyTest.jar | grep -v grep | awk '{print $2}'`
if [ $? -ne "$pid" ]
then
echo "脚本执行完毕,进程启动成功,发布成功,请测试!!!"
echo "脚本执行完毕,进程启动成功,发布成功,请测试!!!"
echo "脚本执行完毕,进程启动成功,发布成功,请测试!!!"
else
echo "脚本执行完毕,进程没有启动,发布失败,请查看日志!!!"
5.保存后重新构建,并且会直接执行启动命令,此时访问程序、验证成功!
与视频有部分差异,并没有通过docker构建gitlab环境,目前本地的电脑内存不允许,采用其他已经存在的gitlab,并且在目标服务器中并没有完全按照视频中通过docker构建镜像进行启动。
后续有空会继续根据视频完成对应的内容。