1. 前言
首先,为啥需要保密源码就不多说了.
其次,公司经费有限,物理隔绝实现不了,只能考虑软隔离.
最后,这种方法依然防止不了程序员自身,所有程序员都有权限.
2. 原理
我们使用的版本管理器是SVN.
基本原理就是使用两个SVN:源码SVN,beamSVN.源码SVN保存erl文件,beamSVN只有非debug编译之后的beam文件.程序拥有源码SVN权限,其他人拥有beamSVN权限.
当程序提交代码之后,SVN钩子自动编译,将变动的文件提交到beamSVN,始终保持两个SVN的.beam文件相同.这样既让非程序拥有最新的代码,又隔离了源码,使之只握在程序员手中.如果出了问题,直接一个个排查程序员即可,大大缩小了范围.
3. 脚本
make_all.sh
这个脚本主要的作用是拉取源码SVN,编译,对比差异,然后将差异提交到beamSVN上面去.
请注意:1.文件结构有特殊要求xxx/int|patch|release结构才行.2.里面的编译脚本需要自己根据情况补充.
auto_svn.info make_all.sh的配置文件,配置了一些必须的参数
#!/bin/bash
#当前物理机svn的安装目录
svn_local_dir="/usr/local/usvn/path/"
#源码SVN路径
source_url=http://xxxxxxx/trunk
svn_user=user
svn_password=password
#ebin SVN路径
ebin_url="http://yyyyyy/trunk"
user_ebin=user
password_ebin=password
#当前版本库自动更新脚本目录
DIR="/data/auto_svn"
#erl
erlc="/usr/local/erlang/bin/erlc"
erl="/usr/local/erlang/bin/erl"
#编译脚本路径-相对于boot目录配置一个相对路径即可(使用tools+Emakefile编译)
make_path="./"
version.txt配置了需要更新的版本,比如需要更新int版的时候,配置int即可.