DevOps实现自动化发布实操

DevOps实现自动化发布流程

本篇文章来自 B站视频(部分步骤与视频存在差异)

流程图及原理

在这里插入图片描述

  1. 本地编写代码
  2. 提交至远程仓库
  3. Jenkins(基于Docker)通过内置Git获取提交的代码,通过Maven进行打包,形成可执行文件,发送至目标服务器并执行启动命令
  4. 访问目标服务器查看效果

效果展示

  1. 查看目标服务器,并未启动java项目在这里插入图片描述
  2. 访问Jenkins执行项目构建操作在这里插入图片描述在这里插入图片描述
  3. 查看目标服务器服务状态在这里插入图片描述在这里插入图片描述

准备步骤

  1. 准备两台虚拟机,安装CentOS-7系统
  2. 打通虚拟机与本机之间的网络,可供安装基础配置
  3. 建议所有操作都在root用户下进行,尽可能减少因为权限带来的问题。
  4. 文件的创建、修改、网络配置通常可以通过重启服务、刷新配置、重启容器、重启虚拟机解决
  5. 可能涉及到的命令(可以跳过)
#安装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安装服务

  1. 安装yum工具

    yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
    
  2. 卸载、安装Docker
    卸载docker

    yum 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
    

    在这里插入图片描述
    安装Docker

    yum install -y docker-ce
    

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

  3. 修改Docker国内镜像源

    vi /etc/docker/daemon.json
    
    #添加配置
    {
        "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    
  4. 配置开机自启docker

    #设置开机自启dokcer
    systemctl enable docker.service
    
  5. 查看版本及docker信息

    #查看docker版本
    docker -v
    #查看docker信息
    docker info
    

    在这里插入图片描述

  6. 安装docker compose命令

    yum install docker-compose 
    

    在这里插入图片描述
    查看docker-compose版本

    docker compose version
    

    在这里插入图片描述

  7. 下载Jenkins
    视频中提到的版本有点低,所有的插件都安装失败,所以我采用了新版本

    docker pull jenkins/jenkins:2.4.0.1.2-lts
    

    创建 文件夹 /usr/local/docker/jenkins_docker
    编写 vim docker-compose.yml

    version: "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/  #镜像数据存储地址
    

    在这里插入图片描述

  8. 启动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已经安装完成

  9. 安装Maven
    maven-Linux-地址
    在这里插入图片描述
    上传后解压至对应目录并 重命名为 maven

    tar -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>
    
  10. 安装JDK(可以不配置环境变量)
    寻找你的运维同事或自行官网下载linux版本
    在这里插入图片描述
    上传后解压至对应目录并 重命名为 maven

    tar -zxvf  jdk-8u291-linux-x64.tar.gz -C /use/local
    mv jdk-8u291-linux-x64.tar.g jdk
    

    在这里插入图片描述

  11. 将JDK和MAVEN配置进docker容器
    在这里插入图片描述

    根据之前的jenkins配置需要将jdk和maven移动至data目录下

    在这里插入图片描述

    切换到目录下查看
    在这里插入图片描述
    至此192.168.1.8所需服务已经安装完成

配置Jenkins全局配置

  1. 配置JDK
    在这里插入图片描述
  2. 配置Maven
    在这里插入图片描述
  3. 配置SSH连接信息
    填写 对应的服务器信息,
    请确保目标服务器路径文件夹已创建
    添加完成后点击测试获取正确结果后,应用并保存在这里插入图片描述

创建一个本地测试jar包(本地测试通过)

在这里插入图片描述
在pom文件中声明打包后的jar包名称
在这里插入图片描述
提交至git
在这里插入图片描述

在Jenkins创建项目管理并完成打包操作

  1. 创建项目
    在这里插入图片描述
    在这里插入图片描述

  2. 配置项目git地址
    在这里插入图片描述

  3. 测试Jenkins拉取git项目文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    根据之前的git maven配置已经实现拉取代码和打包操作

配置构建完成后将文件发送至目标服务器并执行启动脚本(192.168.1.7)

  1. 选择在构建后执行通过SSH发送文件命令
    在这里插入图片描述
  2. 选择之前配置好的全局配置中的 目标服务器配置,并选择需要发送的文件,这里使用的是通配符。在这里插入图片描述
  3. 再次构建
    在这里插入图片描述
    查看日志显示发送成功
    需要将目标服务器配置好运行环境jdk和jre均可
  4. 添加构建后执行脚本命令
    在这里插入图片描述
    在这里插入图片描述
# 启动程序
	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构建镜像进行启动。

后续有空会继续根据视频完成对应的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果app用发布证书打包后怎么装手机测试

一、背景 iOS 的开发证书打包后可以通过爱思助手安装到手机上测试&#xff0c;但发布 (Production) 证书是不允许安装在手机上的。而在实际开发过程中&#xff0c;尽管通过开发证书测试过了&#xff0c;iOS生产包仍然可能会出现一些问题&#xff0c;需对生产包也进行测试。 而…

Tdengine 时序数据库-安装与客户端连接

使用 TDengine 时序数据库的版本是 2.4.0.0 使用的安装RPM的安装方便安装 TDengine-server-2.4.0.0-Linux-x64.rpm 1. 安装指令: rpm -ivh TDengine-server-2.4.0.0-Linux-x64.rpm [rootnode3 server]# rpm -ivh TDengine-server-2.4.0.0-Linux-x64.rpm Verifying... …

赛效:如何将PDF文件免费转换成Word文档

1&#xff1a;在网页上打开wdashi&#xff0c;默认进入PDF转Word页面&#xff0c;点击中间的上传文件图标。 2&#xff1a;将PDF文件添加上去之后&#xff0c;点击右下角的“开始转换”。 3&#xff1a;稍等片刻转换成功后&#xff0c;点击绿色的“立即下载”按钮&#xff0c;将…

android Surface(1, 2)

android Surface(1, 2) android的Surface相关内容从底层依次往上分别是&#xff1a; 1.frameBuffer&#xff0c;简称fb&#xff0c;对于同一个android系统&#xff0c;可以同时存在多个frameBuffer&#xff0c;本机是fb0&#xff0c;依次外接时&#xff0c;fb1, fb2, ……fbn…

怎样在文章末尾添加尾注(将尾注的数字变为方括号加数字)

在进行文章编写或者需要添加注解时&#xff0c;需要进行尾注的添加&#xff0c;下面将详细说明如何进行尾注的添加 操作 首先打开需要进行添加尾注的文档&#xff0c;将光标移动至需要进行添加尾注的文字后。 紧接着在上方工具栏中&#xff0c;选择引用&#xff0c;在引用页…

短视频矩阵-短视频seo源码开发搭建

开发场景&#xff1a;抖音seo&#xff0c;短视频seo&#xff0c;抖音矩阵&#xff0c;短视频矩阵源码开源 一、 短视频矩阵源码需要掌握以下技术&#xff1a; 1. 视频编码技术 短视频矩阵系统利用视频编码技术&#xff0c;将视频文件进行压缩和解压缩&#xff0c;实现了高质…

CMU 15-445 -- Hash Tables - 04

CMU 15-445 -- Hash Tables - 04 引言Hash TablesHash FunctionsHashing Scheme小结 Dynamic Hash TablesChained Hashing (链式哈希)Extendible Hashing(可扩展哈希)Linear Hashing(线性哈希) 总结 引言 本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅…

04_前端包管理工具模块化

注意事项: ​ 改模块代码不用重启服务器,修改config文件的时候需要重启服务器 ​ nvm的安装路径和node的安装路径不能在同一路径下面 ​ 有乱码问题使用管理员权限进行使用use方法 下载安装node ​ 使用命令进行安装 1.nvm list 查看已下载所有的node版本 2.nvm install…

leetcode146.手撸 LRU 算法(java)

LRU 缓存 LRU 缓存题目描述LRU 介绍LRU 算法设计代码实现 单调栈算法 LRU 缓存 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/lru-cache 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实…

设计模式学习之抽象工厂模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式 如果你已经理解了工厂方法模式&#xff0c;那你能够很快的明白抽象工厂模式。 温习&#xff1a;什么是工厂方法模式 我们先温习一下…

[muduo学习笔记]事件分发器(Channel、Poller)

此学习笔记参考施磊老师的muduo教学课程。 目的是搞懂 muduo 网络库的核心框架。EventLoop、channel 和 Poller 之间的关系 文章目录 1 Poller 抽象基类2 Channel3 模块的包含muduo模块梳理参考&#xff1a; 整体框架如下&#xff1a; muduo是基于 Reactor 模式的网络库&#…

【前端|HTML系列第2篇】HTML零基础入门之标签元素

大家好&#xff0c;欢迎来到前端入门系列的第二篇博客。在这个系列中&#xff0c;我们将一起学习前端开发的基础知识&#xff0c;从零开始构建网页和Web应用程序。本篇博客将为大家介绍HTML&#xff08;超文本标记语言&#xff09;常用标签元素&#xff0c;帮助零基础小白快速入…

基于深度学习的高精度抽烟行为检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度抽烟行为检测识别系统可用于日常生活中或野外来检测与定位抽烟行为目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的抽烟行为目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

虚幻引擎(UE5)-大世界分区WorldPartition教程(一)

文章目录 WC与WP的区别一、如何开启WP1.默认创建WP2.手动创建WP3.转换创建WP 二、设置World Partition参数三、启动流送总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 WC与WP的区别 WorldCompostion&#xff08;WC&#xff09; 是UE4中制作大世界…

Apifox|API 文档和开发闭环初体验

Apifox是一款集文档、接口定义、数据模拟、自动化测试为一体的接口协作平台。 据功能介绍&#xff0c;基本总结Apifox Postman Swagger Mock JMeter 既然评的文章那么多&#xff0c;掀起了一阵子热度&#xff0c;究竟哪些功能&#xff1a; 用下来有哪些体会&#xff1a;…

第7章 Scala集合

第7章 Scala集合 7.1 简介 ​ ​ scala.collection.immutable ​ scala.collection.mutable ​ 7.2 数组 ​ 不可变数组 package chapter07object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](10…

多项目管理难在哪,多项目同时进行该如何做好进度管理?

最近&#xff0c;听到群里的项目经理吐槽&#xff0c;手上有10多个项目同时进行&#xff0c;工作起来手忙脚乱&#xff0c;杂乱无章&#xff0c;让他压力特别大。 对于项目经理来说&#xff0c;多项目并行推进的情况已是常态。从工作层面来说&#xff0c;不仅在各项目之间抢资…

SpringBoo集成MongoDB

一、集成简介 spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb&#xff0c;MongoRepository操作简单&#xff0c;MongoTemplate操作灵活&#xff0c;我们在项目中可以灵活适用这两种方式操作mongodb&#xff0c;MongoRepository的缺点是不够灵活…

购物车业务

一、分析购物车vo &#xff08;1&#xff09;添加成功页 public class CartItemVo implements Serializable {/*** 商品id*/private Long skuId;/*** 是否选中*/private Boolean check true;/*** 商品标题*/private String title;/*** 商品图片*/private String image;/***…

如何优雅的将 Docker 镜像从 1.43G 瘦身到 22.4MB

Docker 镜像的大小对于系统的 CI/CD 等都有影响&#xff0c;尤其是云部署场景。我们在生产实践中都会做瘦身的操作&#xff0c;尽最大的可能使用 Size 小的镜像完成功能。下文是一个简单的 ReactJS 程序上线的瘦身体验&#xff0c;希望可以帮助大家找到镜像瘦身的方向和灵感。 …