likes
comments
collection
share

透过一次devops部署,聊git

作者站长头像
站长
· 阅读数 11

本文正在参加「金石计划」 最近接到一个任务,对手上现有的项目进行devops部署,大佬满脸激情在小黑板上写写画画,我们在下面一脸恍然的做笔记,然后下来各自负责,终于搞定,接下来整理,发现自己忙活了半天git版本控制,但也收获满满,分享给大家。

Devops下的git

git作为一个版本控制工具,很多小伙伴们其实已经很了解了,我们就来聊聊基于devops,这次开发当中git用到的一些技巧。

分支划分

大部分的devops是从git开始的,毕竟不从CI/CD(持续集成/持续部署)的需求角度上看,是绕不开版本和分支管理这个需求的,而git正好可以解决这些问题,所以,我们先基于devops看一下项目的分支划分:

透过一次devops部署,聊git

整个项目分为线上,线下两个部分,我们一一来说明:

项目分为三种角色:

1、项目的管理员,大佬,负责开发(难题攻克),上线。

2、项目的测试,妹子,负责开发的bug测试

3、项目的开发,功能(bug)实现

首先在线上,三个分支代表三种角色,但是这里要注意:

1、大佬有一个,也就是说只有一个人管理项目的主分支。

2、测试有两个(妹子),按照功能测试不同部分。

3、开发有很多(嘿嘿嘿)

所以基于上图,需要进行三个环境的部署:

1、线上环境,无须多讲,这个是提供给客户使用的,重点就是一个,稳定,稳定,还是TMD稳定。

2、测试环境,需要给测试单独部署一套环境,保证测试不会被开发突然的bug打断测试,同时保证线上的代码是没有问题的。

3、开发环境,开发自己在编写代码的过程当中,包括测试之前需要进行单元测试以及和其他开发的代码合并,那么就需要维护一个开发的分支。

版本提交流程

所以整个项目的操作流程可以大概是这样的:

1、开发在线下自己的分支(self_develop)上进行代码的开发。

2、完成开发之后,确保目前自己的develop分支和线上的develop分支是一致的

git pull origin develop

3、然后提交自己的代码到线上的develop

首先肯定是在线下self_develop上把自己的代码提交版本

git add README.md
git commit -m "一次跨越历史的修改"

然后切换到线下develop分支上,合并self_develop。

注意,线下的develop只是为了和线上develop的版本统一的,不要手动去修改这个分支的代码

git checkout develop  
git merge self_develop 

这里就可以在本地的开发环境下进行一些单元测试,确保没有功能逻辑的问题了,(我之前有个朋友,写完代码直接提交测试,后来,后来.......)

然后将线下develop提交到线上,同时提交测试:

git push origin develop

到这里,开发的小伙伴就可以接着开(写)发(bug)了,测试大佬收到提交测试的消息,将线上的develop的代码合并到线上testing测试分支,gitlab 通过监听testing合并的钩子调用Jenkins,Jenkins开始部署测试版本代码。

测试测试没有问题,那么就可以提交个项目大佬,将线上的testing合并到线上的main分支,同样调用监听main的gitlab钩子,Jenkins开始上线部署。

那,这个就是最基本的一个版本提交流程

注意点

1、免密提交

这个,好多小伙伴首先想到的是提交ssh公钥的形式进行免密提交,大概流程:

(1) 使用ssh-keygen生产自己计算机的公钥和私钥

(2)拷贝公钥到gitlab的ssh配置当中做授信

这里也可以使用明文的形式将用户名和密码放到提交的地址上,也是可以的,这种方式可以让http的git地址进行免密。

http://our.gitlab.com/big_project/web_server.git

http://username:password@our.gitlab.com/big_project/web_server.git

这里要注意,如果在密码当中有特殊符号需要使用转义符\来转义

2、免提交文件

在搭建分支之后,第一次提交之前,建议先规定好不提交的文件,比如开发,测试,线上,三套环境的运行配置文件,数据库ORM映射文件,日志文件,测试脚本这些三个版本本身就不一样,并且像日志文件也不小,所以不建议提交,所以提前写好git不提交文件.gitignore是十分必要的:

*.log #所有所有的log文件
logs/ #logs目录
*.pyc #所有python零时文件
config.ini #配置文件

这个文件当中写的文件和目录是不会被提交的,但是,如果前期项目的git没有设置.gitignore,也就是说这些提交了,那么再单独编写这个文件是没办法限制提交的,还需要结合命令,清除提交这个文件的缓存:

git rm --cache 文件名  

3、免合并文件

如果再自己本地的环境下,自己开发分支和线上开发分支的配置文件也不一样,这个时候除了配置.gitignore文件之外,也可以设置免合并文件,再两个分支合并的时候,这个文件就不会被合并,这个原理是再被合并的分支上定义一个新的merge引擎:

(1)定义自己的合并引擎

git config --global merge.ours.driver true  

(2)创建不合并清单 .gitattributes

config.ini merge=ours

(3)提交.gitattributes

git add .gitattributes
git commit -m "免合并文件定义"

这样其他分支合并配置的这个分支就不会合并清单当中的文件了。

当然还有很多其他的技巧和思路,我们之后再聊,欢迎各位大佬多多指点。 本文正在参加「金石计划」