CI/CD(持续集成/持续交付/持续部署)

CICD流程图
在这里插入图片描述

代码管理仓库gitlab

  • gitlab是个私有的代码管理仓库, 可以运行在企业内部的网络中, 使企业开发人员可以保持代码的私有性; 同时也方便自行管理代码; gitlab有很多CI功能, 但是通常还是采用Jenkins, 原因就是Jenkins的功能要更加强大

gitlab部署:

1.下载epel源
yum -y install epel-release
2.配置yum源
vim /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

3.更新本地yum缓存
yum makecache

4.安装GitLab社区版
yum install gitlab-ce #自动安装最新版本(若需安装指定版本,则添加版本号即可,即yum install gitlab-ce-x.x.x)

5.自定义域名
vim /etc/gitlab/gitlab.rb
external_url ‘http://gitlab.wxy.com’ -->> 更改为自定义域名

6.初始化gitlab
gitlab-ctl reconfigure #初始化时间较长




Running handlers:
Running handlers complete
Chef Client finished, 543/1455 resources updated in 02 minutes 57 seconds
gitlab Reconfigured!

打开浏览器访问 http://gitlab.wxy.com

gitlab控制命令
修改配置后生效操作 gitlab-ctl reconfigure
查看gitlab服务状态 gitlab-ctl status
开启/关闭/重启服务 gitlab-ctl start/stop/restart
查看gitlab日志 gitlab-ctl tail [component]

初始化后需要修改密码 root登陆

持续集成工具Jenkins

在这里插入图片描述
1.jenkins功能

  • 持续的软件版本发布/测试项目
  • 监控外部调用执行的工作

2.jenkins概念

  • Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的开源项目,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成

3.jenkins目地

  • 持续、自动地构建/测试软件项目。
  • 监控软件开放流程,快速问题定位及处理,提提高开发效率。

4.jenkins特性

  • 开源的java语言开发持续集成工具,支持CI,CD。
  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
  • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

5.产品发布流程

  • 产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
  • 持续集成(Continuous integration,简称CI)
  • 持续交付(Continuous delivery)
  • 持续部署(continuous deployment)

jenkins部署

安装java环境(jenkins依赖java环境)
解压
tar zxf jdk-8u45-linux-x64.tar.gz

移动至指定目录
mv jdk1.8.0_45/ /usr/local/jdk1.8

配置环境变量
vim /etc/profile
JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JRE_HOME/lib: C L A S S P A T H e x p o r t P A T H = CLASSPATH export PATH= CLASSPATHexportPATH=JAVA_HOME/bin: J R E H O M E / b i n : JRE_HOME/bin: JREHOME/bin:MAVEN_HOME/bin:$PATH

配置生效
source /etc/profile

查看java版本
java -version
java version “1.8.0_45”

安装jenkins
导入jenkins源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

导入jenkins官方证书
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安装jenkins(安装的是最新的LTS版本)
yum install -y jenkins

配置文件

grep “^ [a-Z]” /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" # jenkins工作目录
JENKINS_JAVA_CMD=""
JENKINS_USER=“jenkins” # jenkinx启动用户
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT=“8080” # 端口
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL=“5”
JENKINS_ENABLE_ACCESS_LOG=“no”
JENKINS_HANDLER_MAX=“100” # 最大连接
JENKINS_HANDLER_IDLE=“20”
JENKINS_ARGS=""

启动jenkins
1.首先需要修改一下启动脚本,文件在/etc/init.d/jenkins
2.因为jenkins的启动脚本默认java路径为:/usr/bin/java
3.但是我们新安装的java路径并不是在这个,所以我们需要新添加路径。如图下所示:
4.新路径地址为:/usr/local/jdk1.8/bin/java

在这里插入图片描述

  • 启动jenkins
    systemctl start jenkins

解锁jenkins
访问本机8080端口
在这里插入图片描述

  • cat /var/lib/jenkins/secrets/initialAdminPassword
    输入密码
    5d3f57bea6e546139fc48ea28f9d5ae5

在这里插入图片描述
在这里插入图片描述

  • web页面配置jdk git maven

  • jdk:可以自动安装,但是已经安装了,这里写入jdk的路径即可
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

批量部署工具absible

  • Ansible是一种自动化的运维工具, 基于Python开发,能够实现批量操作. 但其实Ansible是基于模块工作的, 本身没有批量部署的能力. 真正具有批量部署的是ansible所运行的模块, Ansible只是提供一种框架.

准备清华base源和epel源
ls /etc/yum.repos.d
centos-base.repo epel.repo

下载ansible
yum -y install ansible

使用ansible前之主机认证
ssh-keygen -t rsa -P ‘’ -f ‘/root/.ssh/id_rsa’

ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

CI/CD总结

最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。传统的软件开发和交付方法正在迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署/发布软件。然而,现在,在DevOps时代,每周,每天,甚至每天多次是常态。当SaaS正在占领世界时,尤其如此,您可以轻松地动态更新应用程序,而无需强迫客户下载新组件。很多时候,他们甚至都不会意识到正在发生变化。开发团队通过软件交付流水线实现自动化,以缩短交付周期

DevOps是什么

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

具体来说,就是在软件交付和部署过程中的提高沟通与协作的效率,旨在更快、更可靠的的发布更高质量的产品。