DevOps简介
DevOps 是Development和Operations的组合,也就是开发和运维的简写。
DevOps 是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等整条生命周期中协作和沟通的最佳实践,DevOps 强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付。
DevOps 四大平台:代码托管(gitlab/svn)、项目管理(jira)、运维平台(腾讯蓝鲸/开源平台)、持续交付(Jenkins/gitlab)
持续集成(CI-Continuous integration):持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续部署(CD-continuous deployment):是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续交付(Continuous Delivery):持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
Gitlab部署与使用
github:开源代码托管网站。
gitlab:应用软件。
git:命令行客户端。
如果是最小化安装的系统,需要做如下初始化配置:
1 | ~]# yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion -y |
安装包下载:https://packages.gitlab.com/gitlab/gitlab-ce
rpm包国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
安装gitlab
1 | ~]# yum -y install gitlab-ce-11.6.5-ce.0.el7.x86_64.rpm |
配置gitlab
1 | [root@gitlab tools]# grep "^[a-Z]" /etc/gitlab/gitlab.rb |
初始化gitlab
1 | ~]# gitlab-ctl reconfigure #修改完配置文件要执行此操作 |
gitlab重设密码的机制:服务器向客户端发送临时token,session里面会包含token。
关闭注册功能:admin area –> settings –> general –> Sign-up restrictions
git常用命令及web环境准备
git常用命令:
下载项目:git clone URL
将项目放入本地仓库: git add name
将项目推送到远程仓库:git commit -m “TAG”
git config --global user.name “name“ #设置全局用户名
git config --global user.email xxx@xx.com #设置全局邮箱
git config --global –list #列出用户全局设置
git add index.html / . #添加指定文件、目录或当前目录下所有数据到暂存区
git commit -m “11“ #提交文件到工作区
git status #查看工作区的状态
git push #提交代码到服务器
git pull #获取代码到本地,更新。
git log #查看操作日志
vim .gitignore #定义忽略文件
git reset --hard HEAD^^ #git版本回滚, HEAD为当前版本,加一个^为上一个,^^为上上一个版本
git reflog # #获取每次提交的ID,可以使用--hard根据提交的ID进行版本回退
git reset --hard 5ae4b06 #回退到指定id的版本
# git branch #查看当前所处的分支
#git checkout -b develop #创建并切换到一个新分支
#git checkout develop #切换分支
准备web环境
Jenkins安装使用
安装Jenkins需要先准备jdk环境:
1 | root@jenkins:/usr/local/src# tar xvf jdk-8u181-linux-x64.tar.gz |
启动Jenkins:
通过jar包直接启动Jenkins
1 | java \ |
rpm包安装Jenkins
1 | [root@s1 ~]# grep -v "#" /etc/sysconfig/jenkins | grep -v "^$" |
安装插件:jenkins–>插件管理–>可选插件,搜索gitlab和Blue Ocean
配置Jenkins权限管理:
基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户关联到角色,需安装Role-based Authorization Strategy。
创建新的用户:jenkins–>系统管理–>管理用户–>新建用户
更改认证方式:jenkins–>系统管理–>全局安全配置;默认创建的用户登陆后可以做任何操作,取决于默认的认证授权方式。
Jenkins邮箱设置
- 生成邮箱登录授权码
- 配置Jenkins管理员邮箱
jenkins–>系统管理–>系统设置
基于ssh key拉取代码
在centos上使用ssh-keygen生成key,将公钥放在gitlab上:点登录用户下拉箭头–>settings–>ssh keys。在本机测试成功后即可。
然后配置Jenkins自动拉取代码:jekins–>凭据–>jenkins–>全局凭据–>添加凭据。将对应于gitlab上公钥的私钥防止在Jenkins上。
pipline
pipline是帮助Jenkins实现CI到CD转变的重要角色,是运行在jenkins 2.X版本的核心插件,简单来说Pipline就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本。
pipline的优势
- 可持续性:jenkins的重启或者中断后不影响已经执行的Pipline Job
- 支持暂停:pipline可以选择停止并等待人工输入或批准后再继续执行。
- 可扩展:通过groovy的编程更容易的扩展插件。
- 并行执行:通过groovy脚本可以实现step,stage间的并行执行,和更复杂的相互依赖关系。
pipline语法:
- Stage:阶段,一个pipline可以划分为若干个stage,每个stage都是一个操作,比如clone代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个node执行。
- Node:节点,每个node都是一个jenkins节点,可以是jenkins master也可以是jenkins agent,node是执行step的具体服务器。
- Step:步骤,step是jenkins pipline最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类
Jenkins 插件提供实现,例如: sh “make”
pipline使用示例
使用Jenkins的pipline一键更新代码脚本
1 | node("slave-node01"){ |
自动化部署tomcat脚本
1 |
|
SonarQube
SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如Hudson/Jenkins 等)不同,SonarQube并不是简单地把不同的代码检查工具结果(例如FindBugs,PMD等)直接显示在Web页面上,而是通过不同的插件对这些结果进行再 加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时Sonar还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用SonarQube,此外,SonarQube的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
安装数据库
数据库要使用5.6版本,不支持5.5的版本
1 | ~]# yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion curl policycoreutils openssh-server openssh-clients postfix -y |
安装sonarqube
下载安装包,安装并修改配置:
1 | [root@host-10-10-10-9 sonarqube]# grep "^[a-Z]" /usr/local/src/sonarqube/conf/sonar.properties |
部署扫描器 sonar-scanner
sonarqube通过调用扫描器sonar-scanner进行代码质量分析,即扫描器的具体工作就是扫描代码:
下载地址:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
1 | # unzip sonar-scanner-2.6.1.zip |
部署好之后,只需在代码所在目录下执行sonar-scanner命令即可进行扫描。
将sonarqube关联到Jenkins
首先安装插件,在Jenkins插件安装界面安装sonar插件SonarQubePlugin,其次配置Sonarqube server,系统管理–>系统设置,里面配置sonarqube servers:
- name:给sonarqube起个名字
- Server URL:sonarqube的地址
让Jenkins 关联到sonarqube scanner
添加扫描器:系统管理–>全局工具配置,里面有个sonarqube scanner
- Name:给scanner起个名字
- 然后点击自动安装或者协商sonarqube scanner命令的位置即可。
配置扫描
选择自己的项目(demo)–>配置–>execute sonarqube scanner,将配置文件的内容修改成如下格式填写完成后保存:
1 | sonar.projectKey=YOUR-KEY |
配置完成后点击构建。构建完成后再构建历史查看时,右上角会有个图标,点击即可前往sonarqube server上查看代码质量监测的结果。
构建的时候还可以执行自己设定的脚本,自定义进行扫描:
代码自动部署流程:
clone代码–>代码扫描–>tar/zip–>从负载均衡摘除后端web服务器–>停止web服务–>同步代码–>启动web服务–>访问测试–>从负载均衡上线服务器