软件开发最开始是由两个团队组成:
开发团队
从头开始设计和整体系统的构建。需要系统不停的迭代更新。运维团队
将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。这看似两个目标不同的团队需要协同完成一个软件的开发。在开发团队
指定好计划并完成coding后,需要提供到运维团队
。运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。
这时开发团队需要经常等待运维团队的反馈。这无疑延长了事件并推迟了整个软件开发的周期。
会有一种方式,在开发团队等待的时候,让开发团队转移到下一个项目中。
等待运维团队为之前的代码提供反馈。可是这样就意味着一个完整的项目需要一个更长的周期才可以开发出最终代码。
基于现在的互联网现状,更推崇敏捷式开发,这样就导致项目的迭代速度更快,但是由于开发团队与运维团队的沟通问题,会导致新版本上线的时间成本很高。这又违背的敏捷式开发的最初的目的。
那么 如果让开发团队和运维团队整合到成一个团队,协同应对一套软件呢?这就被称为DevOps。
DevOps
,字面意思是Development &Operations的缩写,也就是开发&运维。虽然字面意思只涉及到了开发团队和运维团队,其实QA测试团队
也是参与其中的。
DevOps |
---|
这表明DevOps是一个不断提高效率并且持续不断工作的过程。
DevOps
的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。
整体的软件开发流程包括:
- PLAN:开发团队根据客户的目标制定开发计划
- CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
- BUILD:编码完成后,需要将代码构建并且运行。
- TEST:成功构建项目后,需要测试代码是否存在BUG或错误。
- DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
- OPERATE:运维团队将代码部署到生产环境中。
- MONITOR:项目部署上线后,需要持续的监控产品。
- INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署。
为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图:
软件开发过程&涉及工具 |
---|
最终可以给DevOps
下一个定义:DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。
自动化的工具协作和沟通来完成软件的生命周期管理。
在code
阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN
或者Git
,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。
https://git-scm.com/
单独准备服务器,采用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: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.11.11:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:2224'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
启动容器:
docker-compose up -d
访问GitLab
首页:
首页 |
---|
查看root用户初始密码:
docker exec -it gitlab cat /etc/gitlab/initial_root_password
初始密码 |
---|
登录root用户:
登录成功后跳转页面 |
---|
第一次登录后需要修改密码:
修改密码 |
---|
搞定后,即可像Gitee、GitHub一样使用。
构建Java项目的工具一般有两种选择,一个是Maven
,一个是Gradle
。这里我们选择Maven作为项目的编译工具。
Maven的安装与配置流程:
具体的安装配置流程后面会做一个详细的讲解,这里必须确保配置好Maven仓库私服以及JDK编译版本。
部署过程,会采用Docker进行部署,暂时只安装Docker即可,后续还需安装Kubenetes。
准备测试环境&生产环境
下载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
效果 |
---|
下载Docker/Compose:https://github.com/docker/compose
将下载好的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
效果 |
---|