訂閱
糾錯(cuò)
加入自媒體

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)死、鳥為食亡!

那么,是否有一些代碼管控方式,來(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)限),填入到瀏覽器窗口中。

1  2  3  下一頁(yè)>  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)