type
status
date
slug
summary
tags
category
icon
password
data
devOps
一、DevOps介绍
软件开发最开始是由两个团队组成:
开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。
运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。
这看似两个目标不同的团队需要协同完成一个软件的开发。
在开发团队指定好计划并完成coding后,需要提供到运维团队。
运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。
这时开发团队需要经常等待运维团队的反馈。这无疑延长了事件并推迟了整个软件开发的周期。
会有一种方式,在开发团队等待的时候,让开发团队转移到下一个项目中。等待运维团队为之前的代码提供反馈。可是这样就意味着一个完整的项目需要一个更长的周期才可以开发出最终代码。
基于现在的互联网现状,更推崇敏捷式开发,这样就导致项目的迭代速度更快,但是由于开发团队与运维团队的沟通问题,会导致新版本上线的时间成本很高。这又违背的敏捷式开发的最初的目的。
那么如果让开发团队和运维团队整合到成一个团队,协同应对一套软件呢?这就被称为DevOps。
DevOps,字面意思是Development &Operations的缩写,也就是开发&运维。虽然字面意思只涉及到了开发团队和运维团队,其实QA测试团队也是参与其中的。

核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。 整体的软件开发流程包括:
- PLAN:开发团队根据客户的目标制定开发计划
- CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
- BUILD:编码完成后,需要将代码构建并且运行。
- TEST:成功构建项目后,需要测试代码是否存在BUG或错误。
- DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
- OPERATE:运维团队将代码部署到生产环境中。
- MONITOR:项目部署上线后,需要持续的监控产品。
- INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核 心,即持续集成、持续部署。
DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通 来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。
二、Code阶段工具
先决条件
这里将通过虚拟机安装3台centos stream 9服务器,并组成kubeneters集群(1个master,2个worker节点),以下是本次实践的基本环境信息:
- VMware Fusion 专业版 13.5.1 (23298085)
- 操作系统:centos stream 9
- k8s版本:v1.28.2
- k8s网络插件:flannel
- k8s存储插件:nfs
- 以下命令皆在
root用户下操作,非root权限用户,如果遇到命令操作没权限可以sudo开始
在虚拟机中按安装3台服务器(内存4G,处理器数量1,处理器内核数量4,网络NAT模式):
- 172.16.55.147 k8s-gitlab
- 172.16.55.148 k8s-jenkins
- docker、docker-compose 安装略
1.centos stream9 修改IP方式
2.1 Git安装
https://git-scm.com/(傻瓜式安装)
2.2 GitLab安装[k8s-gitlab节点]
准备docker-compose.yml文件
三、Build阶段工具
下载jdk和maven[k8s-jenkins节点]
jdk:
JDK8下载地址
maven:
文件解压缩到
/usr/local修改maven
setting.xml 文件配置四、Integrate工具
持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。
Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。
Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。
4.1 Jenkins介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具
Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现DevOps的核心
工具。
Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。
Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。
一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。
CI/CD可以理解为:
CI过程即是通过Jenkins将代码拉取、构建、制作镜像交给测试人员测试。
持续集成:让软件代码可以持续的集成到主干上,并自动构建和测试。
CD过程即是通过Jenkins将打好标签的发行版本代码拉取、构建、制作镜像交给运维人员部署。
持续交付:让经过持续集成的代码可以进行手动部署。
持续部署:让可以持续交付的代码随时随地的自动化部署。
4.2 Jenkins安装
准备docker-compose.yml文件

密码就是日志中的
78c8fc14a64542f9ad7fdd50f4256c55选择插件来安装


等待插件安装,如果网络不好,可以使用国内镜像源
然后重启jenkins下载插件。
除了上面的默认插件,还需要安装插件:
Git Parameter
Publish Over SSH
Environment Injector
4.3 Jenkins配置
JDK、MAVEN全局配置,应用并保存


系统管理配置:指定服务器中构建文件存放地址

4.4 Jenkins项目示例
创建一个基础简单的项目:springboot-shiro,[可自定义简单项目,用于区分不同分支下构建的校验]
在gitlab中创建,并指定两个分支

代码信息:
添加docker信息

docker-compose.yml
Dockerfile








看一下docker容器,已经发布到docker容器中
sonarqube安装
访问9000端口,原始账号密码admin/admin

安装中文插件:

sonar-scanner安装
服务器中安装sonar-scanner

jenkins 安装插件 SonarQube ScannerVersion

记住token
squ_e3bf74290deebf7f92595e45ff4441b46bfOcdf6在jenkins中配置全局凭证


jenkins项目配置,在maven build之后配置

配置jenkins容器支持操作宿主机docker配置【示例二适用】
修改jenkins项目配置

编写jenkins执行脚本文件【示例二适用】
添加jenkins 构建后操作

其中的${BRANCH}来源于【构建环境】步骤中的配置
4.5、Jenkins示例二(流水线)
新建流水线任务:

下面的git地址是Jenkinsfile的git地址,我是把这个文件放到了这个项目里,所以直接用这个项目的git地址:



编辑Jenkinsfile,就是把示例一中的步骤通过这个脚本文件执行

4.6 钉钉通知配置
下载插件DingTalk,我下载的是【2.7.3版本】,不同版本配置有差异;


钉钉群里面添加一个自定义机器人:



配置好后,可以右下角点击测试看一下

在示例二为例:[钉钉插件2.7.3版本,无需配置流水线脚本post{}]


- 作者:胜天半子派大星
- 链接:https://blog.madd.cloudns.org/article/devOps
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。