DevOps是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。
Git是一个版本控制系统,GitLab是一个远程的Git仓库,GitLab与GitHub及国内的码云类似,用户在GitLab上注册账号,上传项目到GitLab,通过GitLab对项目进行版本控制。通常企业使用GitLab在局域网搭建自己的Git代码管理仓库,不过随着云计算的发展,很多企业也开始使用提供Git仓库管理公共服务的平台,比如:码云、GitHub等。
在Linux服务器上安装GitLab,首先先安装docker
查看centos系统内核版本uname-r内核版本>=3.1
升级软件包及内核
yumupdate在Centos7上安装Docker
yuminstall-ydocker启动,开机启动
dockersystemctlstartdockerdockersystemctlenabledocker若docker拉取镜像超时,配置一下国内镜像路径
可以通过修改daemon配置文件
vi/etc/docker/daemon.json添加
接着拉取gitlab、redis、postgresql,gitlab依赖redis和postgresql。
dockerpullsameersbn/redisdockerpullsameersbn/postgresqldockerpullbeginor/gitlab-ce:11.0.1-ce.0创建postgresql、redis容器:
dockerrun--nameredis-d-p6379:6379sameersbn/redisdockerrun--namepostgresql-d-p5432:5432sameersbn/postgresql创建GitLab的配置(etc)、日志(log)、数据(data)放到容器之外,便于日后升级,因此我们先准备这三个目录。
mkdir-p/mnt/gitlab/etcmkdir-p/mnt/gitlab/logmkdir-p/mnt/gitlab/data创建gitlab容器:
dockerrun--detach--hostname192.168.183.133-p10022:22-p8899:80--namegitlab--restartunless-stopped-v/mnt/gitlab/etc:/etc/gitlab-v/mnt/gitlab/log:/var/log/gitlab-v/mnt/gitlab/data:/var/opt/gitlabgitlab/gitlab-ce:11.5.4-ce.0可以看到镜像都启动了
无语,访问不了,明明启动了。我这里卡了好久,反复尝试。我看别人都行,最后我选择github好了。
点击“NewProject”创建新项目
输入项目信息,提交。项目新建成功,进入项目主页,通过项目主页即可访问项目内容,并得到项目的Git项目仓库地址:
在开发电脑安装Git,并在Idea中设置Git
打开idea,按下图菜单指示从GitLab克隆项目:
输入项目的Git仓库地址进行克隆:
1、在工程根目录创建.gitignore此文件中记录了在提交代码时哪些文件或目录被忽略
.idea/target/*.iml2、提交代码
首先执行添加文件到暂存区:
再执行commit提交文件到本地仓库
最终代码确认无误可以提交到远程仓库
虚拟化技术是对软件基础设施、操作系统、软件等IT资源进行有效的管理,使用户不再受物理资源的限制,提高计算机资源的利用率。虚拟化技术是云计算的基础,例如阿里云的云主机、腾讯云等都应用了虚拟化技术。虚拟化技术整体上包括两个方面:硬件虚拟化和软件虚拟化,具体分为:网络虚拟化、存储虚拟化、桌面虚拟化、服务器虚拟化等,我们平常说的最多的是服务器虚拟化。服务器虚拟化就是在同一个物理服务器上运行多个虚拟机,让服务器的cpu、内存、磁盘、I/O等硬件设施为每个虚拟机服务,在每个虚拟机中运行不同的软件,虚拟机之间是隔离状态。
在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMware、VirtualBox等,由hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。
2、Containers容器化技术
容器技术中docker引擎取代了hypervisor,docker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。
3、技术对比:资源占用:虚拟机由于是独立的操作系统,占用资源比docker多。启动速度:虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。体积:容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体积比容器大的多。
本项目微服务采用SpringBoot开发,将每个微服务工程打成Jar包,最终在Docker容器中运行jar,部署流程如下:1、SpringBoot工程最终打成Jar包2、创建Docker镜像3、创建容器4、启动容器
1、使用maven的打包插件:将下边的插件依赖拷贝到微服务工程中,本例子将学成在线的Eureka工程打包:
打包成功,如下图:
将上一步的jar包拷贝到Linux服务器,准备创建镜像。测试jar包是否可以运行,执行:java-jarxc-govern-center-1.0-SNAPSHOT.jar在xc-govern-center-1.0-SNAPSHOT.jar位置编写Dockerfile文件
FROMjava:8ENVARTIFACTIDxc‐govern‐centerENVARTIFACTVERSION1.0‐SNAPSHOTENVHOME_PATH/homeWORKDIR$HOME_PATHADD/$ARTIFACTID-$ARTIFACTVERSION.jar$HOME_PATH/$ARTIFACTID.jarENTRYPOINT["java","‐jar","xc‐govern‐center.jar"]在Dockerfile文件所在目录执行:
dockerbuild-txc-govern-center:1.0-SNAPSHOT.创建容器基于xc-govern-center:1.0-SNAPSHOT镜像创建容器,容器名称为xc-govern-center-test
2、删除容器dockerrm容器名/id
3、删除镜像dockerrmi镜像名或镜像Id
上边构建的过程是通过手工一步一步完成,maven提供docker-maven-plugin插件可完成从打包到构建镜像、构建容器等过程。
1、编写pom_docker.xml
mvn‐fpom_docker.xmlcleanpackage‐DskipTestsdocker:build创建镜像成功,结果如下:
Successfullybuilt64682c9ba311[INFO]Builtxc‐govern‐center:1.0‐SNAPSHOT[INFO]Taggingxc‐govern‐center:1.0‐SNAPSHOTwith1.0‐SNAPSHOT[INFO]‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐[INFO]BUILDSUCCESS[INFO]‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐[INFO]Totaltime:7.409s[INFO]Finishedat:2018‐07‐19T14:21:16+08:00[INFO]FinalMemory:52M/414M[INFO]‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐持续集成什么是持续集成持续集成(Continuousintegration)简称CI,持续集成的思想是每天要多次将代码合并到主干,并进行集成、测试,这样就可以提早发现错误,进行修正。持久集成也属于DevOps持续集成的好处:1、自动化集成部署,提高了集成效率。2、更快的修复问题。3、更快的进行交付。4、提高了产品质量。
微服务的镜像会上传到Docker仓库保存,常用的公网Docker仓库有阿里云,网易云等,在企业局域网也可以搭建自己的Docker私有仓库,本教程使用Docker提供的私有仓库registry。进入Docker私有仓库所在服务器执行:
1、安装Docker2、创建私有仓库容器
响应结果如下:
{"repositories":[]}上边的响应结果说明在docker私有仓库中还没有镜像。
{"insecure‐registries":["192.168.101.64:5000"]}重启docker:
systemctlrestartdocker.service启动docker-registry
⒈下载镜像,要使用最新的LTS:
dockerpulljenkins/jenkins:ltsdockerpulljenkins/jenkins⒉运行
dockerrun--namejenkins-p8889:8080-p50000:50000-vjenkins_home:/var/jenkins_home--restartalways-djenkins/jenkins:lts⒊访问Jenkins实例
dockerexecjenkinscat/var/jenkins_home/secrets/initialAdminPassword从输出结果中获得的一串Jenkins初始密码,复制密码,填入密码
3.定制Jenkins
选择默认的Installsuggestedplugins(安装推荐的插件)来安装插件。
本例子将xc-govern-center工程使用Jenkins进行构建。在xc-govern-center工程根目录编写pom_docker_registry.xml此文件相比工程原有pom.xml增加了docker-maven-plugin插件,其作用是构建docker镜像并将镜像推送到Docker私有仓库(192.168.183.133:5000)。
1、配置git凭证此凭证用于远程从git仓库克隆工程源代码输入git仓库的账号和密码,这里如果使用码云,下边需要配置码云的账号和密码。
2、配置git仓库地址,此地址即xc-edu项目的地址
目标:使用jenkins重复构建不要产生重复镜像使用jekins停止容器、删除容器、删除镜像之间进行判断
shell脚本如下:
2、执行maven构建:
执行如下maven指令:
cleanpackage‐fxc‐govern‐center/pom_docker_registry.xml‐DskipTestsdocker:build3、拉取镜像,创建容器,启动容器从docker私有仓库拉取镜像并创建容器,启动容器显示容器运行日志
dockerrun‐‐namexc‐govern‐center‐p50101:50101‐idt192.168.101.64:5000/xc‐govern‐center:1.0‐SNAPSHOTdockerlogs‐fxc‐govern‐center