第一天:DevOps与CI/CD
DevOps的初识
DevOps定义
DevOps是Development和Operations的组合,也就是开发和运维的简写
DevOps集文化理念、实践与工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助企业更快速的发展和改进产品,这种速度使企业能够更好地服务于客户,并在市场上高效地参与竞争
DevOps是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等整条生命周期中协作和沟通的最佳实践,DevOps强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付
DevOps平台
1、代码托管(gitlab/svn)
2、项目管理(jira/禅道/Teambition)
3、运维平台(腾讯蓝鲸/自主研发平台)
4、持续交付(Jenkins/gilab)
DveOps的优势
1、速度:应用版本快速的迭代更新,以更好地适应不断变化的市场需求
2、快速交付:更快的将应用交付至生产环境
3、可靠性:保证应用交付的结果是成功的
4、规模:可以在大规模环境下且可靠的交付应用
5、增强合作:建立适应DevOps文化模式的团队,开发人员和运维人员协同工作
6、安全性:在快速迭代的同时保证应用的质量
为什么要使用DevOps
DevOps强调团队协作、相互协助、持续发展,然而传统的模式是开发人员只顾开发程序,运维只负责基础环境管理和代码部署及监控等,其并不是为了
一个共同的目标而共同实现最终的目地,而DevOps则实现团队作战,即无论是开发、运维还是测试,都为了最终的代码发布、持续部署和业务稳定而付出
各自的努力,从而实现产品设计、开发、测试和部署的良性循环,实现产品的最终持续交付
CI/CD简介
什么是持续集成
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并且相互不影响工作
什么是持续部署
是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以及实现交付高质量的产品,持续部署到某种程度上代表了一个开发团队的更新迭代速率
代码部署流程
1、测试环境:环境代码和 数据库是独立的
2、预发布环境:一般是连接的生产环境的数据库,用来检测 最新的代码 是否正常
3、生产环境
预发布就是 测试环境 和 生产环境的一个过渡,用来提前检测 最新代码 经测试环境后,上到正式环境是否异常,所以 一般 预发布环境测试时,测试组都会比较小心,尽量避免脏数据
CI/CD流程
Git简介
Git:由linux之父林纳斯托瓦兹在2005年开发的一个分布式持续集成工具,设计之初就具备了以下优点:
1、可靠性:数据的上传和下载必须是安全的、一致的,所有行为都要进行验证,数据的变更通过不同的版本进行逻辑隔离
2、分布式:linus Torvalds认为之前的集中式版本控制系统性能太差,于是git的代码恢复不依赖于中央服务器,而是每个开发电脑都是一个本地仓库,可用于代码提交与回滚
3、高效:Git基于分布式的功能实现代码的快速提交与秒级回滚
Gitlab:基于git的一个私有代码仓库
GitLab安装
安装环境要求
https://docs.gitlab.com/ce/install/requirements.html
国内下载地址
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
安装依赖环境
[root@xiaomao ~]# yum install -y curl policycoreutils-python openssh-server
安装postfix
[root@xiaomao ~]# sudo yum install -y postfix
开始安装
[root@xiaomao ~]# rpm -ivh gitlab-ce-11.10.8-ce.0.el7.x86_64.rpm
安装成功
配置GitLab站点Url
GitLab默认的配置文件路径是/etc/gitlab/gitlab.rb
默认的站点Url配置项是:
external_url 'http://gitlab.example.com'
[root@xiaomao ~]# vim /etc/gitlab/gitlab.rb [root@xiaomao ~]# grep "^[a-Z]" /etc/gitlab/gitlab.rb external_url 'http://192.168.140.128' #使用邮件功能 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "mjiamao@163.com" gitlab_rails['smtp_password'] = "VWXXRNFNZDIKJOER" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = "mjiamao@163.com" user["git_user_email"] = "mjiamao@163.com"
重新启动
[root@xiaomao ~]# gitlab-ctl reconfigure
完成后将会看到如下输出
Running handlers: Running handlers complete Chef Client finished, 14/643 resources updated in 01 minutes 06 seconds gitlab Reconfigured!
访问
修改密码
密码最少8位
登录
管理员密码:root
密码:12345678
gitlab安装目录
/etc/gitlab #配置文件目录 /run/gitlab #运行pid目录 /opt/gitlab #安装目录 /var/opt/gitlab #数据目录 /var/log/gitlab #日志目录
GitLab基本功能使用
新建用户
创建成功
修改用户密码
最后点击保存就行
新建用户登录测试
第一次登录需要修改密码
关闭注册页面
在超级管理员用户下关掉它
最后点击保存
新建权限组
组创建成功
添加新用户到组里面
新用户登录查看是否添加到组里面
新用户创建项目
GitLab基础命令
# 停止gitlab [root@xiaomao ~]# gitlab-ctl stop #启动gitlab [root@xiaomao ~]# gitlab-ctl start #重启gitlab [root@xiaomao ~]# gitlab-ctl restart # 查看组件的运行状态 [root@xiaomao ~]# gitlab-ctl status # 查看单个组件的运行日志 [root@xiaomao ~]# gitlab-ctl tail nginx
GitLab使用
# 设置全局用户名 [root@xiaomao ~]# git config --global user.name "zhangxiaoming" # 设置全局邮箱 [root@xiaomao ~]# git config --global user.email "1249796886@qq.com" #列出用户全局设置 [root@xiaomao ~]# git config --global --list user.name=zhangxiaoming user.email=1249796886@qq.com
#克隆项目到本地 [root@xiaomao ~]# git clone http://192.168.140.128/zhangxiaoming/devops.git Cloning into 'devops'... Username for 'http://192.168.140.128': zhangxiaoming(用户名) Password for 'http://zhangxiaoming@192.168.140.128':(密码) [root@xiaomao ~]# cd devops/ [root@xiaomao devops]# touch README.md [root@xiaomao devops]# cat README.md 11111111111111111111111111111111111123 11111111111111111111111111111111111123 111111111111111111111111111111111123 #添加指定文件、目录或当前目录下所有数据到暂存区 [root@xiaomao devops]# git add README.md #提交文件到本地工作区(本地仓库) [root@xiaomao devops]# git commit -m "v1" [master e112de0] v2 1 file changed, 1 insertion(+) #提交代码到服务器 [root@xiaomao devops]# git push #查看本地工作区和暂存区的状态 [root@xiaomao devops]# git status
查看本地仓库
# 拉取最新代码 [root@xiaomao devops]# git pull #查看当前所属分支 [root@xiaomao devops]# git branch * master #查看本地工作区的状态 [root@xiaomao devops]# git status #查看操作日志 [root@xiaomao devops]# git log #定义忽略某些指定文件或者目录不上传至gitlab [root@xiaomao devops]# ls mysql.conf README.md [root@xiaomao devops]# cat .gitignore mysql.conf [root@xiaomao devops]# pwd /root/devops [root@xiaomao devops]# git add ./ [root@xiaomao devops]# git commit -m "add gitignore" [root@xiaomao devops]# git push
# git代码回滚,HEAD为当前版本,加一个^为上一个,^^为上上一个版本 [root@xiaomao devops]# git reset --hard HEAD^ HEAD is now at 0bd3674 add v2 [root@xiaomao devops]# git reset --hard HEAD^^ HEAD is now at 5683e9a add gitignore1 # 回退到指定id的版本 [root@xiaomao devops]# git log #查看版本的id号 [root@xiaomao devops]# git reset --hard 59f8c51 HEAD is now at 59f8c51 v2
创建分支
zhangxiaoming用户登录
git checkout -b develop #创建并切换到一个新分支 git checkout develop #切换分支
工作流程解析
1、工作区:clone的代码或者开发自已编写的代码文件所在的目录,通常是代码所在的一个服务的目录名称
2、暂存区:用于存储在工作区中的代码进行修改后的文件所保存的地方,使用git add添加
3、本地仓库:用于提交存储在工作区和暂存区中改过的文件地方,使用git commit提交
4、远程仓库:多个开发共同协作提交代码的仓库,即gitlab服务器
常见的分支结构
1、单分支模型:只有master分支
2、生产/开发模型:master分支与develop类型分支 (常用)
3、特性/发布模型:master/develop/feature类型分支
4、开发/发布/分离模型:master/develop/feature/release类型分支
5、开发/发布/缺陷分离模型:master/develop/feature/release/hotfix类型分支
Gitlab 实现 分支 合并
xiaomao 192.168.140.128
xiaomao1 192.168.140.129
#切换到指定的分支代码 [root@xiaomao1 opt]# git clone -b develop http://192.168.140.128/zhangxiaoming/devops.git Cloning into 'devops'... Username for 'http://192.168.140.128': zhangxiaoming Password for 'http://zhangxiaoming@192.168.140.128': #修改代码重新提交 [root@xiaomao1 devops]# git add ./ [root@xiaomao1 devops]# git commit -m "v9" [root@xiaomao1 devops]# git push
#开始合并代码 [root@xiaomao devops]# git pull [root@xiaomao devops]# git merge origin/develop [root@xiaomao devops]# git push
- 唱吧DevOps的落地,微服务CI/CD的范本技术解读
- CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
- 【微服务】唱吧DevOps的落地,微服务CI/CD的范本技术解读
- CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
- 唱吧DevOps的落地,微服务CI/CD的范本技术解读
- iHealth基于Docker的DevOps CI/CD实践
- Devops经典实战应用:基于 Jenkins 和 Kubernetes的CI/CD
- 12 DevOps adn CI/CD
- 敏捷开发、持续集成/交付(CI/CD)、DevOps学习笔记
- 超长干货:基于Docker的DevOps CI/CD实践——来自iHealth的分享
- iHealth基于Docker的DevOps CI/CD实践
- 唱吧DevOps的落地,微服务CI/CD的范本技术解读----最大的难点并不是实际业务代码的编写,而是服务的监控和调试以及容器的编排
- 企业DevOps研发模式下CI/CD实践详解指南
- 唱吧DevOps的落地,微服务CI/CD的范本技术解读
- 视频演讲: 基于Docker+CI/CD的DevOps实践经验分享
- Wercker 基于DOCKER的CI/CD部署Kubernetes和Microservice的自动化平台,被ORACLE收购,
- CI / CD 持续集成和部署 相关概念
- 基于OpenStack+Docker设计与实现CI/CD——基于Docker技术的CI&CD实践
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s
- 数人云|当容器与CI/CD相遇,7个建议送给你