Jenkins + git submodule:解决代码安全性问题
道哥分享一、一个真实的代码泄漏故事
二、Jenkins 的基本使用
三、git submodule 基本使用
四、在 Jenkins 中使用 git module 来编译所有的模块
五、总结
一、一个真实的小故事
事情发生在功能机的时代,我们项目组开发一款手机,软件开发成员大概有 20 人左右吧。结果在手机发布的一周后,另一家小厂就推出了软件界面、功能几乎完全一样的手机,除了开机界面。
因为那个时代,大家几乎都是使用 MTK、高通提供的解决方案,都是统一的菜单式功能,你没法拿出有力的证据来说明别人偷窃了你的代码。
后来内部查明,的确是有开发人员把代码泄漏出去了,于是后来所有的电脑上 USB 口全部被禁掉了。
这是我亲身经历的真实故事,当时每个人负责一个模块,比如:A 负责通话管理和电话簿,B 负责系统设置,C 负责短信和彩信。。。在编译的时候,是需要所有的代码放在一起,统一编译的,这也就意味着所有的软件人员都可以拿到全部源代码,这也就为代码泄漏埋下了隐患,出现了这次严重的事件,毕竟人为财死、鸟为食亡!
那么,是否有一些代码管控方式,来解决这个权限问题呢?
现在项目中,都强调要分层、分模块,这是从软件工程的角度来考虑的。如果再进一步, 把这些模块都划分为一个小的子系统,每个开发人员只负责自己的模块,并且只能有权限拉取自己的代码,这样他就没法获取到一个项目中所有模块的代码了。
只有项目整合人员(管理员),才有全部权限来拉取所有源代码来构建整个系统,这样的话,就可以对代码的安全问题有更好的掌控了。
要实现这样的代码管控,使用 git 工具中的 submodule 就可以完成,这篇文章,我们就来详细的讲解一下 git submodule 的使用。
这篇文章是工具型的,可能比较长,为了提供一站式服务,我会把相关的资源、步骤、遇到的错误信息等细节都记录下来,方便以后查阅。
不论如何,经过这篇文章,你可以学习、了解下面这几个方面的知识点:
Jenkins 的基本使用方法;git submodule 的基本指令用法;通过三个 demo 项目,一步一步操作实现代码的安全管控;利用 Jenkins + git submodule 来实现自动化编译;git subtree 与 submodule 的区别;
如果您需要文中提到的软件和代码资源,在文章末尾可以找到下载方式。
二、Jenkins 的基本使用
1. Jenkins 是什么?
Jenkins是一个开源、由 Java 编写的持续集成工具,也就是说它帮助我们自动构建各类项目。Jenkins 运行在 Servlet 容器中(例如 Apache Tomcat),在 Ubuntu 系统中使用 apt-get 就可以一键安装。
Jenkins 有下面几个特点:
嵌入在 Web 服务器中,通过浏览器来操作,非常方便;可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令;可以通过各种手段触发构建。例如提交给版本控制系统时被触发,通过类似Cron的机制调度,在其他的构建已经完成时,还可以通过一个特定的URL进行请求;Jenkins强大的插件式,使得Jenkins可以集成很多软件,可能帮助我们持续集成我们的工程项目;给用户很大的权限和灵活性来自动发布、部署等等。
其他的有点我就不吹了,我觉得很好用,如果有机会,你也可以试一下。另外,我测试用的虚拟机是新安装的 Ubuntu16.04-64,按照下面的流程操作,保证可以顺利运行。
JDK 和 Jenkins 的安装方法,在网络上很多资料,有些过程是有问题的,或者某些关键步骤没写清楚。为了便于你一次就操作成功,我还是记录在这里。
如果你对安装过程已经很熟悉了,可以直接滑到下一个主题。
2. 安装 JDK8
(1) 下载,解压
下载 jdk-8u221-linux-x64.tar.gz,(文末提供下载地址),解压到目录 /home/sewain/OpenSource ,解压指令:
sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt
(2) 设置环境变量
执行指令:vim ~/.bashrc,在末尾添加如下内容:
export JAVA_HOME=/opt/jdk1.8.0_221export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=./$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jart
我建议你也用这样的环境变量,以后如果升级 JDK 版本,只需要修改 JAVA_HOME 就可以了。
(3) )重新加载环境变量
执行指令:source ~/.bashrc,此时环境变量就生效了。
验证一下: java -version,出现如下信息就说明 OK 了:
java version "1.8.0_221"Java(TM) SE Runtime Environment (build 1.8.0_221-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
3. 安装 Jenkins
(1) 导入 Jenkins 存储库的 GPG 密钥
sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
(2) Jenkins存储库添加到系统中sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
(3) 使用 apt 安装
sudo apt updatesudo apt install jenkins
Jenkins 服务将在安装过程完成后自动启动,可以通过指令 systemctl status jenkins 进行验证。
systemctl status jenkins
(4) 配置端口
Jenkins 是嵌入在一个 tomcat 服务器中的,默认使用端口 8080,容易与其他服务冲突,因此需要修改一下。涉及到 2 个文件:
文件一:/etc/init.d/jenkins
第一行的 PATH 变量中,添加自己的 JDK 地址:
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/jdk1.8.0_221/bin
文件二:/etc/default/jenkins
把 HTTP_PORT 的值修改为新的端口号,例如: HTTP_PORT=9090 。
(5) Jenkins 的启动和停止指令
sudo service jenkins startsudo service jenkins stop
如果不幸遇到错误,可以反复使用这两个指令来排除错误。
4. 在浏览器中配置 Jenkins
在浏览器中输入: htpp://localhost:9090,稍等一会,出现界面:
按照界面提示,从 /var/lib/jenkins/secrets/initialAdminPassword 文件中复制安全密码(需要 root 权限),填入到浏览器窗口中。
1 2 3 下一页>