訂閱
糾錯
加入自媒體

Jenkins + git submodule:解決代碼安全性問題

2021-03-18 17:27
道哥分享
關注

一、一個真實的代碼泄漏故事

二、Jenkins 的基本使用

三、git submodule 基本使用

四、在 Jenkins 中使用 git module 來編譯所有的模塊

五、總結

一、一個真實的小故事

事情發(fā)生在功能機的時代,我們項目組開發(fā)一款手機,軟件開發(fā)成員大概有 20 人左右吧。結果在手機發(fā)布的一周后,另一家小廠就推出了軟件界面、功能幾乎完全一樣的手機,除了開機界面。

因為那個時代,大家?guī)缀醵际鞘褂?MTK、高通提供的解決方案,都是統(tǒng)一的菜單式功能,你沒法拿出有力的證據(jù)來說明別人偷竊了你的代碼。

后來內部查明,的確是有開發(fā)人員把代碼泄漏出去了,于是后來所有的電腦上 USB 口全部被禁掉了。

這是我親身經歷的真實故事,當時每個人負責一個模塊,比如:A 負責通話管理和電話簿,B 負責系統(tǒng)設置,C 負責短信和彩信。。。在編譯的時候,是需要所有的代碼放在一起,統(tǒng)一編譯的,這也就意味著所有的軟件人員都可以拿到全部源代碼,這也就為代碼泄漏埋下了隱患,出現(xiàn)了這次嚴重的事件,畢竟人為財死、鳥為食亡!

那么,是否有一些代碼管控方式,來解決這個權限問題呢?

現(xiàn)在項目中,都強調要分層、分模塊,這是從軟件工程的角度來考慮的。如果再進一步, 把這些模塊都劃分為一個小的子系統(tǒng),每個開發(fā)人員只負責自己的模塊,并且只能有權限拉取自己的代碼,這樣他就沒法獲取到一個項目中所有模塊的代碼了。

只有項目整合人員(管理員),才有全部權限來拉取所有源代碼來構建整個系統(tǒng),這樣的話,就可以對代碼的安全問題有更好的掌控了。

要實現(xiàn)這樣的代碼管控,使用 git 工具中的 submodule 就可以完成,這篇文章,我們就來詳細的講解一下 git submodule 的使用。

這篇文章是工具型的,可能比較長,為了提供一站式服務,我會把相關的資源、步驟、遇到的錯誤信息等細節(jié)都記錄下來,方便以后查閱。

不論如何,經過這篇文章,你可以學習、了解下面這幾個方面的知識點:

Jenkins 的基本使用方法;git submodule 的基本指令用法;通過三個 demo 項目,一步一步操作實現(xiàn)代碼的安全管控;利用 Jenkins + git submodule 來實現(xiàn)自動化編譯;git subtree 與 submodule 的區(qū)別;

如果您需要文中提到的軟件和代碼資源,在文章末尾可以找到下載方式。

二、Jenkins 的基本使用

 1. Jenkins 是什么?

Jenkins是一個開源、由 Java 編寫的持續(xù)集成工具,也就是說它幫助我們自動構建各類項目。Jenkins 運行在 Servlet 容器中(例如 Apache Tomcat),在 Ubuntu 系統(tǒng)中使用 apt-get 就可以一鍵安裝。

Jenkins 有下面幾個特點:

嵌入在 Web 服務器中,通過瀏覽器來操作,非常方便;可以執(zhí)行基于Apache Ant和Apache Maven的項目,以及任意的Shell腳本和Windows批處理命令;可以通過各種手段觸發(fā)構建。例如提交給版本控制系統(tǒng)時被觸發(fā),通過類似Cron的機制調度,在其他的構建已經完成時,還可以通過一個特定的URL進行請求;Jenkins強大的插件式,使得Jenkins可以集成很多軟件,可能幫助我們持續(xù)集成我們的工程項目;給用戶很大的權限和靈活性來自動發(fā)布、部署等等。

其他的有點我就不吹了,我覺得很好用,如果有機會,你也可以試一下。另外,我測試用的虛擬機是新安裝的 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) 設置環(huán)境變量

執(zhí)行指令: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

我建議你也用這樣的環(huán)境變量,以后如果升級 JDK 版本,只需要修改 JAVA_HOME 就可以了。

(3) )重新加載環(huán)境變量

執(zhí)行指令:source ~/.bashrc,此時環(huán)境變量就生效了。

驗證一下: java -version,出現(xiàn)如下信息就說明 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存儲庫添加到系統(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 服務將在安裝過程完成后自動啟動,可以通過指令 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,稍等一會,出現(xiàn)界面:

按照界面提示,從 /var/lib/jenkins/secrets/initialAdminPassword 文件中復制安全密碼(需要 root 權限),填入到瀏覽器窗口中。

1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關注公眾號
OFweek人工智能網
獲取更多精彩內容
文章糾錯
x
*文字標題:
*糾錯內容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網安備 44030502002758號