Jenkins + git submodule:解決代碼安全性問(wèn)題
一、一個(gè)真實(shí)的代碼泄漏故事
二、Jenkins 的基本使用
三、git submodule 基本使用
四、在 Jenkins 中使用 git module 來(lái)編譯所有的模塊
五、總結(jié)
一、一個(gè)真實(shí)的小故事
事情發(fā)生在功能機(jī)的時(shí)代,我們項(xiàng)目組開(kāi)發(fā)一款手機(jī),軟件開(kāi)發(fā)成員大概有 20 人左右吧。結(jié)果在手機(jī)發(fā)布的一周后,另一家小廠就推出了軟件界面、功能幾乎完全一樣的手機(jī),除了開(kāi)機(jī)界面。
因?yàn)槟莻(gè)時(shí)代,大家?guī)缀醵际鞘褂?MTK、高通提供的解決方案,都是統(tǒng)一的菜單式功能,你沒(méi)法拿出有力的證據(jù)來(lái)說(shuō)明別人偷竊了你的代碼。
后來(lái)內(nèi)部查明,的確是有開(kāi)發(fā)人員把代碼泄漏出去了,于是后來(lái)所有的電腦上 USB 口全部被禁掉了。
這是我親身經(jīng)歷的真實(shí)故事,當(dāng)時(shí)每個(gè)人負(fù)責(zé)一個(gè)模塊,比如:A 負(fù)責(zé)通話管理和電話簿,B 負(fù)責(zé)系統(tǒng)設(shè)置,C 負(fù)責(zé)短信和彩信。。。在編譯的時(shí)候,是需要所有的代碼放在一起,統(tǒng)一編譯的,這也就意味著所有的軟件人員都可以拿到全部源代碼,這也就為代碼泄漏埋下了隱患,出現(xiàn)了這次嚴(yán)重的事件,畢竟人為財(cái)死、鳥(niǎo)為食亡!
那么,是否有一些代碼管控方式,來(lái)解決這個(gè)權(quán)限問(wèn)題呢?
現(xiàn)在項(xiàng)目中,都強(qiáng)調(diào)要分層、分模塊,這是從軟件工程的角度來(lái)考慮的。如果再進(jìn)一步, 把這些模塊都劃分為一個(gè)小的子系統(tǒng),每個(gè)開(kāi)發(fā)人員只負(fù)責(zé)自己的模塊,并且只能有權(quán)限拉取自己的代碼,這樣他就沒(méi)法獲取到一個(gè)項(xiàng)目中所有模塊的代碼了。
只有項(xiàng)目整合人員(管理員),才有全部權(quán)限來(lái)拉取所有源代碼來(lái)構(gòu)建整個(gè)系統(tǒng),這樣的話,就可以對(duì)代碼的安全問(wèn)題有更好的掌控了。
要實(shí)現(xiàn)這樣的代碼管控,使用 git 工具中的 submodule 就可以完成,這篇文章,我們就來(lái)詳細(xì)的講解一下 git submodule 的使用。
這篇文章是工具型的,可能比較長(zhǎng),為了提供一站式服務(wù),我會(huì)把相關(guān)的資源、步驟、遇到的錯(cuò)誤信息等細(xì)節(jié)都記錄下來(lái),方便以后查閱。
不論如何,經(jīng)過(guò)這篇文章,你可以學(xué)習(xí)、了解下面這幾個(gè)方面的知識(shí)點(diǎn):
Jenkins 的基本使用方法;git submodule 的基本指令用法;通過(guò)三個(gè) demo 項(xiàng)目,一步一步操作實(shí)現(xiàn)代碼的安全管控;利用 Jenkins + git submodule 來(lái)實(shí)現(xiàn)自動(dòng)化編譯;git subtree 與 submodule 的區(qū)別;
如果您需要文中提到的軟件和代碼資源,在文章末尾可以找到下載方式。
二、Jenkins 的基本使用
1. Jenkins 是什么?
Jenkins是一個(gè)開(kāi)源、由 Java 編寫的持續(xù)集成工具,也就是說(shuō)它幫助我們自動(dòng)構(gòu)建各類項(xiàng)目。Jenkins 運(yùn)行在 Servlet 容器中(例如 Apache Tomcat),在 Ubuntu 系統(tǒng)中使用 apt-get 就可以一鍵安裝。
Jenkins 有下面幾個(gè)特點(diǎn):
嵌入在 Web 服務(wù)器中,通過(guò)瀏覽器來(lái)操作,非常方便;可以執(zhí)行基于Apache Ant和Apache Maven的項(xiàng)目,以及任意的Shell腳本和Windows批處理命令;可以通過(guò)各種手段觸發(fā)構(gòu)建。例如提交給版本控制系統(tǒng)時(shí)被觸發(fā),通過(guò)類似Cron的機(jī)制調(diào)度,在其他的構(gòu)建已經(jīng)完成時(shí),還可以通過(guò)一個(gè)特定的URL進(jìn)行請(qǐng)求;Jenkins強(qiáng)大的插件式,使得Jenkins可以集成很多軟件,可能幫助我們持續(xù)集成我們的工程項(xiàng)目;給用戶很大的權(quán)限和靈活性來(lái)自動(dòng)發(fā)布、部署等等。
其他的有點(diǎn)我就不吹了,我覺(jué)得很好用,如果有機(jī)會(huì),你也可以試一下。另外,我測(cè)試用的虛擬機(jī)是新安裝的 Ubuntu16.04-64,按照下面的流程操作,保證可以順利運(yùn)行。
JDK 和 Jenkins 的安裝方法,在網(wǎng)絡(luò)上很多資料,有些過(guò)程是有問(wèn)題的,或者某些關(guān)鍵步驟沒(méi)寫清楚。為了便于你一次就操作成功,我還是記錄在這里。
如果你對(duì)安裝過(guò)程已經(jīng)很熟悉了,可以直接滑到下一個(gè)主題。
2. 安裝 JDK8
(1) 下載,解壓
下載 jdk-8u221-linux-x64.tar.gz,(文末提供下載地址),解壓到目錄 /home/sewain/OpenSource ,解壓指令:
sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt
(2) 設(shè)置環(huán)境變量
執(zhí)行指令:vim ~/.bashrc,在末尾添加如下內(nèi)容:
export JAVA_HOME=/opt/jdk1.8.0_221export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=./$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jart
我建議你也用這樣的環(huán)境變量,以后如果升級(jí) JDK 版本,只需要修改 JAVA_HOME 就可以了。
(3) )重新加載環(huán)境變量
執(zhí)行指令:source ~/.bashrc,此時(shí)環(huán)境變量就生效了。
驗(yàn)證一下: java -version,出現(xiàn)如下信息就說(shuō)明 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) 導(dǎo)入 Jenkins 存儲(chǔ)庫(kù)的 GPG 密鑰
sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
(2) Jenkins存儲(chǔ)庫(kù)添加到系統(tǒng)中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 服務(wù)將在安裝過(guò)程完成后自動(dòng)啟動(dòng),可以通過(guò)指令 systemctl status jenkins 進(jìn)行驗(yàn)證。
systemctl status jenkins
(4) 配置端口
Jenkins 是嵌入在一個(gè) tomcat 服務(wù)器中的,默認(rèn)使用端口 8080,容易與其他服務(wù)沖突,因此需要修改一下。涉及到 2 個(gè)文件:
文件一:/etc/init.d/jenkins
第一行的 PATH 變量中,添加自己的 JDK 地址:
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/jdk1.8.0_221/bin
文件二:/etc/default/jenkins
把 HTTP_PORT 的值修改為新的端口號(hào),例如: HTTP_PORT=9090 。
(5) Jenkins 的啟動(dòng)和停止指令
sudo service jenkins startsudo service jenkins stop
如果不幸遇到錯(cuò)誤,可以反復(fù)使用這兩個(gè)指令來(lái)排除錯(cuò)誤。
4. 在瀏覽器中配置 Jenkins
在瀏覽器中輸入: htpp://localhost:9090,稍等一會(huì),出現(xiàn)界面:
按照界面提示,從 /var/lib/jenkins/secrets/initialAdminPassword 文件中復(fù)制安全密碼(需要 root 權(quán)限),填入到瀏覽器窗口中。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開(kāi)始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開(kāi)成長(zhǎng)空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?