在使用git进行代码管理时候,有开发分支dev,线上分支pro。
在开发的时候,每个人会从dev分支上拉出自己的分支,进行开发,完成后合并到dev分支上面。 线上环境进行更新的时候,会从pro分支上面pull最近的代码,然后重启服务运行。
这里有一个问题,dev分支和pro分支,往往会存在几个文件不同情况,例如配置文件setting等等。在这种情况下应该如何处理比较合适?
我现在的处理方式,是配置写两个文件,不放git,根据IP来识别开发与正式,来选用不同的配置
前面的一般都这样,搞一个dev分支,dev分支测试完成后,在不同的环境中测试,测试通过后, 加入到master分支测试,稳定后发布到线上。
可能有一些线上bug紧急处理的支线会直接进master
master
如果有运维,可以运维写脚本处理
1.将线上的配置文件取出来,做一个文件包A
2.脚本执行的部分:
2.1git拖取 master分支(测试完成的分支)到线上
2.2将文件包A覆盖线上环境文件,这是文件权限等等
2.3刷新redis缓存等一些操作。
2.4清除一些.git等一些隐藏文件等等
2.5将发版信息,发送邮件,或者发送slack聊天工具等等,告知开发组等等
2.6回滚操作,如果某些步骤执行失败,那么前面执行成功的步骤,如果需要执行回滚操作的,需要执行回滚操作。
没有运维,自己也可以用shell写一下,不难,一个git命令,一个cp命令, 缓存可以手动刷新
我认为你可以做一个 线上文件包, 线上发版,和cp命令一起执行 git pull xxxxxxxx && \cp -rf xxxxx,或者放到shell文件里面运行。
git pull xxxxxxxx && \cp -rf xxxxx
运维那边会做一些自动化操作界面,譬如:
通过界面,将各个分支发布到不同的测试环境,或者线上环境,点击push task后,脚本会执行一系列的命令行。
配置文件可以写入 git,但注意要放入私仓。
不同环境的配置文件写多分,布署项目的时候,随同拉取代码的过程后,执行依赖安装之后,执行配置文件初始化,等等这一系列的动作,通过 phing 工具,非常方便的再结合 jenkins 工具,完成自动发布和构建。
欢迎提出你的想法,一起交流。
@successgdc #3楼 看不明白
我的思路可能表达的不清楚。让我再试着重述一下:
environments/ dev/ prod/ test/
拉取某分支或某 tag 代码
安装依赖,composer 依赖,或 npm 依赖
环境的参数设置(将对应环境的配置文件复制到相应的目录的过程)
其他初始化过程
关于这一步,可以通过 phing 工具编写自动化构建脚本,使用 jenkins 平台,完成快捷的构建。
还有什么地方我没有讲明白的么,欢迎讨论
你这个说的是第一次线上从github拖取安装,还有如下问题
1.本地二开代码通过gitlab更新到线上环境,本地的代码是全部,还是部分,还是某些文件通过公司内部的gitlab更新上去
2.本地配置和线上配置不一致的某些配置文件如何处理,这些文件要不要放到gitlab里面,如果也放进去的话如何处理,如果不放进去如何处理
2. 如果某些配置文件在各个环境中不同,譬如本地二开环境,本地的dev测试环境,本地的staging,还有一些其他的测试环境,以及线上环境,线上环境的php可能多个,这个问题问的是如何自动化发版
可以无脑发版,通过shell脚本,用什么样子的策略更好的解决这些文件差异问题
譬如数据库配置文件,邮箱配置,支付的配置(本地是沙盒环境配置)等等
以及后续有新的配置改动,譬如更改邮件配置,如何更新和添加配置信息
可以在多个不同的环境中一劳永逸的发版
譬如,某个项目,4,5个程序员开发功能,一个周后开发了10 个分支,那么需要测试,那么测试人员如何自己发版到各个测试环境,而不依赖于程序员?
如果某些分支存在配置更改,各个环境配置不同,如何弄
可以 讨论下,整一个推荐部署文档
首先要讨论
1.线上的代码,第一次如何部署,全部文件从本地gitlab中拖过去,还是部分,如果是部分,那么那部分代码文件的问题
2.不放到代码库的部分,譬如某些依赖库,如果不放到gitlab里面,后期如果升级这些依赖库包,直接在线上升级依赖库包是不是影响网站访问?如果是多个php机器,很难保证各个节点一致升级
恩,因为是在小公司,运维跟开发都是自己,想在这边讨论下关于部署大家是如何部署(抛砖引玉下)。
就像上面说的,肯定大家都有碰到过,只是解决不同。 像fecshop大大说的,我曾经为了这些问题各种姿势寻找答案。始终找不到自己满意的解决方式(可能自己用的姿势不对)。
特别是线上,线下配置不同也是蛮恶心人的,处女座情结:joy:。
@Axin #9楼
我认为比较简单的方式,就是把一部分基本万年不变的配置文件不放到github里面,譬如数据库配置
其他的都放到gitlab里面
然后把一些发生变动的线上配置文件放到一个文件夹里面(在线上环境里面)
更新的时候,git pull && cp 命名, 也就是git拖取代码成功后,马上执行cp命令,将那些线上独有的文件覆盖github里面的,如果有其他需要操作的,就在后面添加执行命令。
git pull && cp 命名
这样一行命令行搞定。
1.还有js 和css , 线上一般都关掉forceCopy,因此发版后需要清空一下@web/assets/
2.http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_config_speed.html
如果开启了配置文件合并,发版后还需要合并配置文件
3.刷新缓存
等等一系列发版后需要操作的事情,
因此写个命令行脚本最好,一劳永逸