文章目录

  • 前言
  • 一、DevOps是什么?
    • 1.1.软件开发的演变
    • 1.2.什么是DevOps?
    • 1.3.DevOps案例研究
  • 二、DevOps工具链(工具准备是实现DevOps的硬性要求)
    • 2.1.Git/GitLab介绍安装使用
      • 2.1.1.介绍
      • 2.1.2.安装 Git及GitLab
      • 2.1.3.在GitLab创建项目
      • 2.1.4.使用Git管理項目(Idea继承Git并对项目进行管理)
      • 2.1.5.从GitLab检出项目
      • 2.1.6.提交代码到GitLab
    • 2.2.Docker
      • 2.2.1.组成
      • 2.2.2.部署微服务到Docker
    • 2.3.持续集成
    • 2.4.创建持续集成任务
  • 三、总结

前言

究竟什么是DevOps? 要想回答这个问题,首先要明确DevOps这个过程参与的人员是谁?即开发团队和IT运维团队!那么,DevOps的意图是什么呢?即在两个团队之间,建立良好的沟通和协作,更快更可靠的创建高质量软件!


一、DevOps是什么?

1.1.软件开发的演变

缓慢而繁琐的瀑布模型演变成敏捷,开发团队在短时间内完成软件开发,持续时间甚至不超过两周。如此短的发布周期帮助开发团队处理客户反馈,并将其与bug修复一起合并到下一个版本中。
虽然这种敏捷的SCRUM方法为开发带来了敏捷性,但它在运维方面却失去了敏捷实践的速度。开发人员和运维工程师之间缺乏协作仍然会减慢开发过程和发布。
DevOps方法就是基于对更好的协作和更快的交付的需求而产生的。DevOps允许用较少复杂问题的持续软件交付来修复和更快地解决问题。

1.2.什么是DevOps?

DevOps是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。 这些活动只能在DevOps中实现,而不是敏捷或瀑布,这就是为什么顶级互联网公司选择DevOps作为其业务目标的前进方向。 DevOps是在较短的开发周期内开发高质量软件的首选方法,可以提高客户满意度。

1.3.DevOps案例研究

Facebook暗启动技术
暗启动是在新功能完全发布给所有用户之前,逐步将新功能,推广到选定的一组用户的过程。这允许开发团队尽早获得用户反馈,测试错误,并且还可以测试基础架构性能

总结

微信,淘宝,以及许多领先的科技巨头,在向所有人发布之前,都使用暗发布逐渐向一小部分用户发布和测试新功能。
DevOps的目的是更快速、更可靠地创建质量更好的软件,同时开发、运维团队之间进行更多的沟通和协作。它是一个自动化过程,允许快速、安全和高质量的软件开发和发布,同时保持所有利益相关者在一个循环中。这就是DevOps获得越来越多的大型互联网公司青睐的真正原因。

二、DevOps工具链(工具准备是实现DevOps的硬性要求)

工欲善其事必先利其器,没有工具链条的打通任督二脉DevOPs是走不通的。
DevOps工具链是研发与运维博弈的产物,尽可能地自动化。
研发分享了DevOp的实践,发现我们项目组还在使用传统的方案开发项目。
CI与CD工具确实能提交交付的能力,自动化是大方向。
以下两幅图都是关于Devops的工具链,近年来由于云计算,互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Git/SVN、Docker、Jenkins、Hudson、Ant/Maven/Gradle、Selenium、QUnit、JMeter等。下图是DevOps相关的工具集:


DevOps 的工具链
DevOps中包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等,补充了一些国内的服务,可以让你更好的执行实施 DevOps 工作流。

版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit、Nexus
持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
容器平台: Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)
配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
日志管理:Logstash、CollectD、StatsD
监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kibana
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

2.1.Git/GitLab介绍安装使用

2.1.1.介绍

Git是一个版本控制系统,GitLab是一个远程的Git仓库,GitLab与GitHub及国内的码云类似,用户在GitLab上注册账号,上传项目到GitLab,通过GitLab对项目进行版本控制。

2.1.2.安装 Git及GitLab

查询user.age和uesr.sex
git config user.age
git config user.sex
设置:
git config --global user.age “itcast”
git config --global user.sex"baidaguo@baidaguo.cn"

2.1.3.在GitLab创建项目

进入首页 点击New Project

输入对应信息并提交,创建成功后,进入项目主页,通过项目主页即可访问项目内容,并得到项目的Git项目仓库地址:

2.1.4.使用Git管理項目(Idea继承Git并对项目进行管理)


2.1.5.从GitLab检出项目


2.1.6.提交代码到GitLab

提交到暂存区->确认无误->push
如果用过svn的话都懂得 大差不差 总体没有什么难度

2.2.Docker

介绍就不多说 是在不知道是个啥玩意可看:
引用百度百科(百度百科Docker)
Docker 源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
官网:docker官网

2.2.1.组成

1、Docker daemon(Docker守护进程):
Docker守护进程是部署在操作系统上,负责支撑Docker Container的运行以及本地Image的管理。
2、Docker client:
用户不直接操作Docker daemon,用户通过Docker client访问Docker,Docker client提供pull、run等操作命令。
3、Docker Image:
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
4、Docker Container:
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。
5、Docker Registry:
Docker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

2.2.2.部署微服务到Docker

1.安装
centos7:

直接通过yum安装即可:yum install -y docker
启动docker:service docker start
查询docker版本:docker version

centos6:

rpm -ivh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install -y docker-io
service docker start

2.部署

1、工程最终打成 Jar包
2、创建Docker镜像
3、创建容器
4、启动容器

3.打包(省略了 大家都会)
4.创建镜像
上一步jar包拷贝到linux服务器先测试jar包是否可以运行:java -jar test-1.0-SNAPSHOT.jar
在test-1.0-SNAPSHOT.jar 位置编写Dockerfile文件


FROM java:8
ENV ARTIFACTID test
ENV ARTIFACTVERSION 1.0-SNAPSHOT
ENV HOME_PATH /home
WORKDIR $HOME_PATH
ADD /$ARTIFACTID-$ARTIFACTVERSION.jar $HOME_PATH/$ARTIFACTID.jar
ENTRYPOINT ["java", "-jar", "test.jar"]

在Dockerfile文件所在目录执行:docker build -t test:1.0-SNAPSHOT.jar

镜像创建成功,查询镜像:

 [root@localhost xc-govern-center]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
test                                                  1.0-SNAPSHOT        ad14dcce6666        35 seconds ago      684 MB

5.创建容器

基于test:1.0-SNAPSHOT镜像创建容器,容器名称为test-demo

docker create --name test-demo -t -p 50101:50101 -e PORT=50101  -e EUREKA_SERVER=http://192.168.101.64:50101/eureka/,http://192.168.101.64:50102/eureka/  test:1.0-SNAPSHOT

创建成功后 可通过docker ps -a命令查看

6.启动容器

docker start test-demo

7.停止与删除

1、停止正在运行的容器
docker stop 容器名
例如:docker stop test-demo
2、删除容器
docker rm 容器名
例如:docker rm test-demo
3、删除镜像
docker rmi 镜像名或镜像Id
例如:docker rmi test:1.0-SNAPSHOT

8.maven构建镜像

a.编写pom_docker.xml
b.将Dockerfile文件拷贝到src/main/resource下
c.删除之前创建的xc-govern-center镜像
d.进入工程根目录(pom_docker.xml所在目录)执行:mvn -f pom_docker.xml clean package -DskipTests docker:build

创建镜像成功,结果如下:

Successfully built 64682c9ba311
[INFO] Built xc-govern-center:1.0-SNAPSHOT
[INFO] Tagging xc-govern-center:1.0-SNAPSHOT with 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.409 s
[INFO] Finished at: 2018-07-19T14:21:16+08:00
[INFO] Final Memory: 52M/414M
[INFO] ------------------------------------------------------------------------

2.3.持续集成

问题描述:
传统的软件开发流程如下:

1、项目经理分配模块给开发人员
2、每个模块的开发人员并行开发,并进行单元测试
3、开发完毕,将代码集成部署到测试服务器,测试人员进行测试。
4、测试人员发现bug,提交bug、开发人员修改bug
5、bug修改完毕再次集成、测试。

问题描述:

1、模块之间依赖关系复杂,在集成时发现大量bug
2、测试人员等待测试时间过长
3、软件交付无法保障

解决上述问题的思考:

1、能否把集成测试时间提前?
2、能否使用自动化工具代替人工集成部署的过程?

持续集成的思想是每天要多次将代码合并到主干,并进行集成、测试,这样就可以提早发现错误,进行修正。持久集成也属于DevOps

优点:

1、自动化集成部署,提高了集成效率。
2、更快的修复问题。
3、更快的进行交付。
4、提高了产品质量。

1.此处测试项目集成流程如下:

2.环境搭建
a.安装Jenkins 官网地址:Jenkins官网
具体安装文档网上都有的 没有私信博主也可以
b.安装GitLab(见上文)
c.pom
此文件相比工程原有pom.xml增加了docker-maven-plugin插件,其作用是构建docker镜像并将镜像推送到Docker私有仓库(192.168.101.64:5000)

2.4.创建持续集成任务

1.Jenkins构建一个任务
2.配置git仓库

a.配置git凭证
此凭证用于远程从git仓库克隆工程源代码
输入git仓库的账号和密码,这里如果使用码云,下边需要配置码云的账号和密码。

b.配置git仓库地址,此地址即构建项目的地址

3.maven构建
1、使用shell脚本停止容器、删除容器、删除镜像
远程登录192.168.101.64(测试服务器)
停止test-center容器
删除test-center容器
删除192.168.101.64:5000/test-center:1.0-SNAPSHOT镜像
shell脚本如下:

#!/bin/bash
result=$(docker ps | grep "192.168.101.64:5000/xc-govern-center")
if [[ "$result" != "" ]]
then
echo "stop xc-govern-center"
docker stop xc-govern-center
fi
result1=$(docker ps -a | grep "192.168.101.64:5000/xc-govern-center")
if [[ "$result1" != "" ]]
then
echo "rm xc-govern-center"
docker rm xc-govern-center
fi
result2=$(docker images | grep "192.168.101.64:5000/xc-govern-center")
if [[ "$result2" != "" ]]
then
echo "192.168.101.64:5000/xc-govern-center:1.0-SNAPSHOT"
docker rmi 192.168.101.64:5000/xc-govern-center:1.0-SNAPSHOT
fi

2、执行maven构建
执行如下maven指令:

clean package -f test-center/pom_docker_registry.xml  -DskipTests docker:build

3、拉取镜像,创建容器,启动容器
从docker私有仓库拉取镜像并创建容器,启动容器
显示容器运行日志

docker run --name test -p 50101:50101 -idt 192.168.101.64:5000/test:1.0-SNAPSHOT
docker logs -f test

4.执行任务
1、进入Jenkins任务页面,点击“立即构建”
2、开始构建,查看日志
5.自动构建

1、设置webhook
2、在Idea中修改项目代码,push到GitLab。
3、Jenkins任务收到GitLab通知自动执行构建。

三、总结

从来没有一个完美的架构能够一直支撑业务的发展,架构是动态的、变化的,随着业务的发展不断演进的,不同的阶段需要不同的架构 。研发协同平台的架构也是经历了单体架构->集群架构->微服务架构几个阶段,而且每一次架构重构周期都比较长,只要架构的模式思路定下来,保持快速的敏捷演进,不停向前,结合反馈和实际应用情况,不断改进,就可以比较稳定的实现架构重构。

附最新架构图(DevOps架构图)

DevOps运维开发一体化相关推荐

  1. DevOps运维开发一体化 - 公开课笔记

    DevOps 运维开发一体化 DevOps 核心思想:最大化提升工作效率,通过一系列技术栈来体现. 开发人员 产品经理 测试人员 运维人员- 分部门的传统的开发方式,开发周期一般比较长,部门比较分散, ...

  2. DevOps运维开发一体化【超详细】

    文章目录 前言 一.DevOps是什么? 1.1.软件开发的演变 1.2.什么是DevOps? 1.3.DevOps案例研究 二.DevOps工具链(工具准备是实现DevOps的硬性要求) 2.1.G ...

  3. DEVOPS 运维开发系列一:ITIL服务目录管理流程的设计与信息化管理系统功能的开发

    ITIL是世界范围内公认的运维服务管理的最佳实践.ITIL的理论落地,不需要什么信息系统的支持,使用word文件.Excel表格一样可以对ITIL的十几个关键管理流程做到很好的落地.虽然是这么讲,但现 ...

  4. 企业IT运维开发一体化解决方案

    在业务随需应变的时代,企业通过IT投入不断强化信息掌控能力从而提升竞争力.IT不仅仅是服务于企业,更重要的是,IT将驱动业务的发展,在IT与业务走向融合的大趋势下,IT服务管理正在成为驱动IT由技术中 ...

  5. python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...

    适用人群 面向想要devops方向发展的全栈python运维开发工程师 课程概述 课程范围:我们的课程由浅入深包含C01到C05五个等级:包含前后端知识,覆盖培养一个合格python全栈工程师所需要的 ...

  6. 2018python培训-2018年5月python自动化运维开发课程新班正式开课!

    2018年5月python自动化运维开发课程新班正式开课! 作者: 更新时间::2018-05-16 新推出的ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运 ...

  7. 运维开发工程师的必备技能总结

    一个好的运维需要懂开发,这样才能迅速判定是运维环境的问题还是开发代码的问题,进而加速自己的运维排查速度.而一个好的开发也需要懂运维,这样能迅速了解到出现问题的时候,是否为运维环境的问题,进而加速自己的 ...

  8. golang的运维开发

    运维开发工程师( devops 工程师) 10k-20k 工作职责: 负责公司基于容器云产品的落地实施. 设计并开发配置管理.发布部署.监控等运维自动化系统. 负责基于开源工具集二次开发,对接平台接口 ...

  9. 对于运维以及运维开发工程师的一些了解

    Linux运行是什么 什么是Linux运维 运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常 在他运转的过程中,对他进行维护,它集合了网络.系统.数据库.开发.安全.监控 ...

  10. 一个运维项目的大概流程,附带20种运维开发工具

    项目前期 产品模型-开发-测试(安全)-上线 立项: 初期: 1)需要的服务器(物理机,虚拟机),数据库,环境,带宽 2) 项目运维的部署方案(也为了后期方便新人的操作) ,比如环境规划(具备一定的扩 ...

最新文章

  1. elasticsearch 分片恢复经历了哪些步骤?
  2. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念
  3. 解决ActionBar中不显示item的问题,item显示在overflow中
  4. 六大举措深耕光通信市场
  5. match和exec
  6. 公开课|智能文本信息抽取算法的进阶与应用
  7. python两数相加有进退位_仁裁者、Python之父Guido“退位”,python何去何从?
  8. linux python2.7 post_在Python 2.7下面使用webpy框架
  9. SEO培训一家之言 素老胡huxingyu
  10. cve20190708补丁的kb名称_kb4499175补丁下载
  11. matlab 色彩的范围,Matlab - 将2个颜色条设置为带有色彩图和良好范围的2个图例...
  12. DataStore的基础用法
  13. 【游戏开发实战】Unity实现水果忍者切水果的刀痕效果教程(两种实现方式:TrailRenderer、LineRenderer)
  14. 两张图片切换比例虚拟进度条
  15. 音乐心理学 | 《聆听心声》笔记
  16. MATLABSTM32CubeMX联合开发系列——不用手写一行代码就能实现CAN通讯
  17. 兼容所有浏览器的网页播放器
  18. xshell6无法卸载、重新安装【1628: 完成基于脚本的安装失败】
  19. Shell脚本发送邮件(CentOS+mailx+QQ邮箱)
  20. <塞梅普雷斯 如是说> 第二部 0.序

热门文章

  1. (原創) 如何控制DE2 VGA輸出時某座標的顏色? (IC Design) (DE2) (Quartus II)
  2. 1.5(java学习笔记)this关键字
  3. 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
  4. 分布式监控系统Zabbix3.2给异常添加邮件报警
  5. Lexical environments: ECMAScript implementation
  6. 《C语言及程序设计》实践参考——找数字
  7. 17.软件架构设计:大型网站技术架构与业务架构融合之道 --- 团队能力的提升
  8. 39.Linux清除用户登录记录和命令历史方法
  9. 25.摘要认证(2)
  10. 67. magento timezone