【DevOps系列】DevOps简介及基础环境安装

作者:后端小肥肠

目录

1. 前言

2. DevOps(详细介绍)

3. Code阶段工具

3.1 Git安装

3.2 GitLab安装

4. Build阶段工具

5. Operate阶段工具

5.1 Docker安装

5.2 Docker-Compose安装

6. Integrate工具

6.1 Jenkins介绍

6.2 Jenkins安装

6.3 Jenkins入门配置

6.3.1 构建任务

6.3.2 配置源码拉取地址

6.3.3 配置Maven构建代码

6.3.4 配置Publish发布&远程操作

7. 结语


1. 前言

在现代软件开发中,采用DevOps(Development和Operations的结合)方法已成为提高效率、加速交付和提升产品质量的重要手段。DevOps不仅仅是一种工具或技术的集合,更是一种文化和理念的融合,旨在通过自动化和协作来消除传统开发与运维之间的隔阂,实现持续交付和持续集成。

本系列文章将深入探讨DevOps的各个方面,从基础概念到实际工具的使用,为读者提供全面的指导和实用的建议。我们将详细介绍各种工具如Git、GitLab、Docker、Jenkins、Maven等的安装和配置过程,帮助读者快速掌握并应用这些关键技术,从而建立高效的软件开发和交付流程。

2. DevOps(详细介绍)

软件开发最开始是由两个团队组成:

  • 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。

  • 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。

这看似两个目标不同的团队需要协同完成一个软件的开发。

在开发团队指定好计划并完成coding后,需要提供到运维团队。

运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。

这时开发团队需要经常等待运维团队的反馈。这无疑延长了事件并推迟了整个软件开发的周期。

会有一种方式,在开发团队等待的时候,让开发团队转移到下一个项目中。等待运维团队为之前的代码提供反馈。

可是这样就意味着一个完整的项目需要一个更长的周期才可以开发出最终代码。


基于现在的互联网现状,更推崇敏捷式开发,这样就导致项目的迭代速度更快,但是由于开发团队与运维团队的沟通问题,会导致新版本上线的时间成本很高。这又违背的敏捷式开发的最初的目的。

那么如果让开发团队和运维团队整合到成一个团队,协同应对一套软件呢?这就被称为DevOps。

DevOps,字面意思是Development &Operations的缩写,也就是开发&运维。

虽然字面意思只涉及到了开发团队和运维团队,其实QA测试团队也是参与其中的。

网上可以查看到DevOps的符号类似于一个无穷大的符号

DevOps

image20211124130409521.png

这表明DevOps是一个不断提高效率并且持续不断工作的过程

DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。

核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。

整体的软件开发流程包括:

  • PLAN:开发团队根据客户的目标制定开发计划

  • CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。

  • BUILD:编码完成后,需要将代码构建并且运行。

  • TEST:成功构建项目后,需要测试代码是否存在BUG或错误。

  • DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。

  • OPERATE:运维团队将代码部署到生产环境中。

  • MONITOR:项目部署上线后,需要持续的监控产品。

  • INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署。

为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图:

软件开发过程&涉及工具

20211123_175935.png

最终可以给DevOps下一个定义:DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

3. Code阶段工具

在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。

3.1 Git安装

https://git-scm.com/(傻瓜式安装)

3.2 GitLab安装

单独准备服务器,采用Docker安装

  • 查看GitLab镜像

    docker search gitlab
  • 拉取GitLab镜像

    docker pull gitlab/gitlab-ce
  • 准备docker-compose.yml文件

    version: '3.1'
    services:gitlab:image: 'gitlab/gitlab-ce:latest'container_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://192.168.11.11:8929'gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:- '8929:8929'- '2224:22'volumes:- './config:/etc/gitlab'- './logs:/var/log/gitlab'- './data:/var/opt/gitlab'
  • 启动容器(需要稍等一小会……)

    docker-compose up -d
  • 访问GitLab首页

首页

image20211124182140596.png

image20211124182140596.png

  • 查看root用户初始密码

    docker exec -it gitlab cat /etc/gitlab/initial_root_password
初始密码

image20211124182921234.png

  • 登录root用户

登录成功后跳转页面

image20211124183003858.png

  • 第一次登录后需要修改密码

修改密码

image20211124193444561.png

搞定后,即可像Gitee、GitHub一样使用。

4. Build阶段工具

构建Java项目的工具一般有两种选择,一个是Maven,一个是Gradle。

这里我们选择Maven作为项目的编译工具。

具体安装Maven流程不做阐述,但是需要确保配置好Maven仓库私服以及JDK编译版本。

5. Operate阶段工具

部署过程,会采用Docker进行部署,暂时只安装Docker即可,后续还需安装Kubenetes

5.1 Docker安装

  • 准备测试环境&生产环境

  • 下载Docker依赖组件

    yum -y install yum-utils device-mapper-persistent-data lvm2
  • 设置下载Docker的镜像源为阿里云

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装Docker服务

    yum -y install docker-ce
  • 安装成功后,启动Docker并设置开机自启

    # 启动Docker服务
    systemctl start docker
    # 设置开机自动启动
    systemctl enable docker
  • 测试安装成功

    docker version
效果

image20211124200317795.png

5.2 Docker-Compose安装

  • 下载Docker/Compose:GitHub - docker/compose: Define and run multi-container applications with Docker

  • 将下载好的docker-compose-Linux-x86_64文件移动到Linux操作系统

  • 设置docker-compose-Linux-x86_64文件权限,并移动到$PATH目录中

    # 设置文件权限
    chmod a+x docker-compose-Linux-x86_64
    # 移动到/usr/bin目录下,并重命名为docker-compose
    mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
  • 测试安装成功

    docker-compose version
效果

image20211124200658107.png

6. Integrate工具

持续集成、持续部署CI、CD的工具很多,其中Jenkins是一个开源的持续集成平台。

Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。

Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。

6.1 Jenkins介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具

Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K 作为实现DevOps的核心工具。

Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。

image20211125141950900.png

image20211125141701495.png

Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。

一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。

CI/CD可以理解为:

  • CI过程即是通过Jenkins将代码拉取、构建、制作镜像交给测试人员测试。

    • 持续集成:让软件代码可以持续的集成到主干上,并自动构建和测试。

  • CD过程即是通过Jenkins将打好标签的发行版本代码拉取、构建、制作镜像交给运维人员部署。

    • 持续交付:让经过持续集成的代码可以进行手动部署。

    • 持续部署:让可以持续交付的代码随时随地的自动化部署。

CI、CD

image20211125154112097.png

6.2 Jenkins安装

  • 拉取Jenkins镜像

    docker pull jenkins/jenkins
  • 编写docker-compose.yml

    version: "3.1"
    services:jenkins:image: jenkins/jenkins:2.319.1-ltscontainer_name: jenkinsports:- 8080:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/
  • 首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限

错误日志

image20211124202610243.png

chmod -R a+w data/
  • 重新启动Jenkins容器后,由于Jenkins需要下载大量内容,但是由于默认下载地址下载速度较慢,需要重新设置下载地址为国内镜像站

    # 修改数据卷中的hudson.model.UpdateCenter.xml文件
    <?xml version='1.1' encoding='UTF-8'?>
    <sites><site><id>default</id><url>https://updates.jenkins.io/update-center.json</url></site>
    </sites>
    # 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
    <?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容器,访问Jenkins(需要稍微等会)

Jenkins首页

image20211124204517433.png

image20211124203336300.png

  • 查看密码登录Jenkins,并登录下载插件

    docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
登录并下载插件

image20211124205050484.png

image20211124205513465.png

  • 选择需要安装的插件

选择需要安装的插件

image20211124205854418.png

image20211124205858730.png

image20211124205917317.png

  • 下载完毕设置信息进入首页(可能会出现下载失败的插件)

image20211124211635550.png

image20211124211700999.png

image20211124211720836.png

6.3 Jenkins入门配置

由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。

6.3.1 构建任务

准备好GitLab仓库中的项目,并且通过Jenkins配置项目的实现当前项目的DevOps基本流程。

  • 构建Maven工程发布到GitLab(Gitee、Github均可)

  • GitLab查看项目

    image20211125195818670.png

  • Jenkins点击左侧导航新建任务

  • 新建任务

    image20211125163541645.png

  • 选择自由风格构建任务

  • 构建任务

    image20211125170350811.png

6.3.2 配置源码拉取地址

Jenkins需要将Git上存放的源码存储到Jenkins服务所在磁盘的本地

  • 配置任务源码拉取的地址

源码管理

image20211125170418337.png

  • Jenkins立即构建

点击任务test中的立即构建

image20211125200218093.png

  • 查看构建工程的日志,点击上述③的任务条即可

查看任务拉取Git源码日志

image20211125201701443.png

可以看到源码已经拉取带Jenkins本地,可以根据第三行日志信息,查看Jenkins本地拉取到的源码。

  • 查看Jenkins容器中/var/jenkins_home/workspace/test的源码

源码存放位置

image20211125201919108.png

6.3.3 配置Maven构建代码

代码拉取到Jenkins本地后,需要在Jenkins中对代码进行构建,这里需要Maven的环境,而Maven需要Java的环境,接下来需要在Jenkins中安装JDK和Maven,并且配置到Jenkins服务。

  • 准备JDK、Maven压缩包通过数据卷映射到Jenkins容器内部

  • 数据卷存放位置

    image20211125203757232.png

  • 解压压缩包,并配置Maven的settings.xml

    <!-- 阿里云镜像地址 -->
    <mirror>  <id>alimaven</id>  <name>aliyun maven</name>  <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>  
    </mirror>
    <!-- JDK1.8编译插件 -->
    <profile><id>jdk-1.8</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>
  • Jenkins配置JDK&Maven并保存

    image20211125204811759.png

    image20211125204818869.png

  • 配置Jenkins任务构建代码

  • 配置Maven构建代码

    image20211125205027013.png

    image20211125205020738.png

  • 立即构建测试,查看target下的jar包

  • 构建源码

    image20211125205240208.png

    image20211125205725948.png

6.3.4 配置Publish发布&远程操作

jar包构建好之后,就可以根据情况发布到测试或生产环境,这里需要用到之前下载好的插件Publish Over SSH。

  • 配置Publish Over SSH连接测试、生产环境

  • Publish Over SSH配置

    image20211125210148202.png

  • 配置任务的构建后操作,发布jar包到目标服务

  • 配置构建后操作

    image20211125205027013.png

    image20211125210424346.png

    image20211125210626631.png

  • 立即构建任务,并去目标服务查看

  • 立即构建

    image20211125210755556.png

    image20211125210826057.png

7. 结语

本文对DevOps的基本概念进行了介绍,同时展示了基础环境搭建步骤,下篇文章将对CI/CD如何闭环实现进行更进一步的讲解,如本文对你有帮助,请动动小手三连一下哦~

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能&#xff0c;它能够在静态页面上模拟后台数据交互的操作&#xff0c;如增加、删除、修改和查询数据&#xff0c;尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库&#xff0c;为我们在设计原型时提供动态数据管理的体验&a…

Java二十三种设计模式-抽象工厂模式(3/23)

抽象工厂模式&#xff1a;复杂系统的灵活构建者 引言 在软件开发中&#xff0c;抽象工厂模式是一种提供接口以创建相关或依赖对象族的创建型设计模式。这种模式允许客户端使用一个共同的接口来创建不同的产品族&#xff0c;而无需指定具体类。 基础知识&#xff0c;java设计模…

Redis Cluster集群搭建只能正常启动一个怎么解决

Redis Cluster集群搭建只能正常启动一个怎么解决 建立redis集群时不小心就遇到了这问题 上图看 这两个都没有问题 接下来这个就出现问题啦 6380没有cluster集群 这个就是连不上 配置文件没错 看了几遍了 那该怎么办&#xff1f; 明明都一样的配置文件&#xff0c;为啥这…

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中&#xff0c;每一种创作形式都是人类情感与想象力的独特表达。而插画&#xff0c;作为这一广阔领域中的璀璨明珠&#xff0c;以其独特的视觉语言和丰富的叙事能力&#xff0c;构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…

解析DDD中的聚合对象

对象这个词对我们而言并不陌生。以最常见的面向对象为例&#xff0c;软件系统中的任何事物都被认为是一种对象。而针对如何设计和实现这些对象&#xff0c;也存在一批开发模式。例如&#xff0c;一种传统的做法是从数据的角度来规划对象的组织形式&#xff0c;先设计数据库模型…

甲骨文面试题【动态规划】力扣377.组合总和IV

给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target 4 输出&#xff1a;7 解释&#x…

QTableView仿Excel表头排序和筛选

一.效果 Excel的排序和筛选弹窗如下所示 功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选,效果如下所示。 从效果图中可以看出,表头Section中的按钮有下列六种状态 enum Butt…

Redis 教程:从入门到入坑

目录 1. Redis 安装与启动1.1. 安装 Redis1.1.1. 在Linux上安装1.1.2. 在Windows上安装 1.2. 启动 Redis1.2.1. 在Linux上启动1.2.2. 在Windows上启动 1.3. 连接Redis1.3.1. 连接本地Redis1.3.2. 连接远程Redis1.3.2.1. 服务器开放端口1.3.2.2. 关闭防火墙1.3.2.3. 修改配置文件…

GESP CCF C++ 三级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&#xff0c;那他可以选择的认证语言有&#xff08;&#xff09;种。 A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月是29天 &#x…

【整体介绍】HTML和JS编写多用户VR应用程序的框架

一、Networked-Aframe是什么&#xff1f; 简称NAF&#xff0c;底层基于Mozilla的AFrame框架&#xff0c;用HTML和JS编写多用户VR应用程序的框架。 二、特性 支持 WebRTC 和/或 WebSocket 连接。 语音聊天。音频流让您的用户在应用程序内交谈&#xff08;仅限 WebRTC&#xff…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

Android安卓使用MQTT(JAVA)

一、app目录下添加 implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0 1) 点击Sync Now更新依赖 2) AndroidManifest.xml文件添加网络权限 <uses-permission android:name"android.permission.INTERNET"/> 二、 使用 1) 创建MqttConn…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…

postMessageXss续2

原文地址如下:https://research.securitum.com/art-of-bug-bounty-a-way-from-js-file-analysis-to-xss/ 在19年我写了一篇文章&#xff0c;是基于postMessageXss漏洞的入门教学:https://www.cnblogs.com/piaomiaohongchen/p/14727871.html 这几天浏览mXss技术的时候&#xff…

第三周周三总结

1.给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输…

RuoYi-后端管理项目入门篇1

目录 前提准备 下载若依前后端 Gitee 地址 准备环境 后端数据库导入 1 克隆完成 若依后端管理后端 Gitte 地址 :若依/RuoYi-Vue 2.1 创建Data Source数据源 2.2 填写好对应的数据库User 和 Password 点击Apply 2.3 新建一个Schema 2.4 填写对应数据库名称 这边演示写的…

【I²C协议】STC89C51单片机IIC通信(代码+原理)

STC89C51单片机IIC通信 什么是IC协议特点构成 通信协议开始信号、结束信号、应答信号数据传输 代码示例 什么是IC协议 IIC,即IC&#xff0c;全称 Inter-Integrated Circuit&#xff0c;字面上的意思是集成电路之间&#xff0c;它其实是IC Bus简称&#xff0c;所以中文应该叫 集…

【Codeforces】Round 957 (Div. 3)_B. Angry Monk

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法刷题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 题目题解try1代码正确题解贪心策略的解释为什么不是直接合并 总结 题目 题目链接 题解 try1代码 我的思路&#xff1a;单纯模拟 循环&a…

【字幕】字幕特效入门

前言 最近两周调研了一下字幕特效的底层程序逻辑&#xff0c;因为工作内容的原因&#xff0c;就分享几个自己找的链接具体细节就不分享了&#xff0c;CSDN也是我的个人笔记&#xff0c;只记录一些简单的内容用于后续自己方便查询&#xff0c;顺便帮助一下正在苦苦查阅资料入门…

基于STC89C51单片机的烟雾报警器设计(煤气火灾检测报警)(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于STC89C51单片机的烟雾报警器设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 原理图 实物图 仿真图 元件清单 代码 系统论文 资源下载 摘要 随着现代家庭用火、…