Jenkins Gitlab持續(xù)集成打包平臺搭建

更多精彩請直接訪問SkySeraph個人站點www.skyseraph.com

相關概念

Jenkins

  • Jenkins绊含,一個用Java編寫的開源的持續(xù)集成工具盗似,提供了軟件開發(fā)的持續(xù)集成服務墓贿,可監(jiān)控并觸發(fā)持續(xù)重復的工作,具有開源抄伍,支持多平臺和插件擴展熏挎,安裝簡單,界面化管理等特點前痘。更多介紹參考[維基](https://en.wikipedia.org/wiki/Jenkins_(software)介紹.

Gitlab

  • GitLab是一個利用Ruby on Rails開發(fā)的開源應用程序凛捏,實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目芹缔,更多介紹參考維基介紹.

持續(xù)集成

  • 持續(xù)集成, 簡稱CI(continuous integration).
  • CI作為敏捷開發(fā)重要的一步坯癣,其目的在于讓產(chǎn)品快速迭代的同時,盡可能保持高質(zhì)量.
  • CI一種可以增加項目可見性最欠,降低項目失敗風險的開發(fā)實踐示罗。其每一次代碼更新,都要通過自動化測試來檢測代碼和功能的正確性窒所,只有通過自動測試的代碼才能進行后續(xù)的交付和部署.
  • CI 是團隊成員間(產(chǎn)研測)更好地協(xié)調(diào)工作鹉勒,更好的適應敏捷迭代開發(fā),自動完成減少人工干預吵取,保證每個時間點上團隊成員提交的代碼都能成功集成的禽额,可以很好的用于對Android/iOS項目的打包.

OTA

  • OTA(Over-the-Air Technology)空中下載技術,具體參考此文介紹.

蒲公英

  • 蒲公英(pgyer)為移動開發(fā)者提供App免費測試分發(fā)應用的服務平臺,支持iOS與Android皮官,簡單兩步分發(fā)應用脯倒。類似的還有fir.im等.

流程結(jié)構(gòu)

簡單繪制了下Jenkins的一個流程,如下圖:

IBM Developer上也有一個看似更復雜一點的圖捺氢,如下圖

持續(xù)交互流程圖:


平臺搭建

Jenkins安裝和啟動

官網(wǎng)https://jenkins.io/index.html
下載http://mirrors.jenkins-ci.org/war/latest/jenkins.war

安裝:

  • 依賴于Java環(huán)境藻丢,首先安裝和配置Java環(huán)境
  • 官網(wǎng)下載Jenkins,雙擊安裝,如果是Mac電腦摄乒,會自動生成全局變量jenkins
  • 修改參數(shù): jenkins + 相關參數(shù)悠反,如
    jenkins --httpPort=8888 #更換端口號,當默認端口8080被占用馍佑,或指定特定端口時斋否。

啟動

  • 手動啟動: java -jar jenkins.war
  • 后臺啟動(默認端口): nohup java -jar jenkins.war &
  • 后臺啟動(指定端口): nohup java -jar jenkins.war -httpPort=88 &
  • 后臺啟動(HTTPS): nohup java -jar jenkins.war -httpsPort=88 &
  • 瀏覽:http://localhost:8080/ , localhost可配置

Jenkins插件安裝

插件安裝

操作: Manage Jenkins -> Manage Plugins -> Available -> Search -> Click to install,如下圖所示

實用插件

  • iOS專用:Xcode integration
  • Android專用:Gradle plugin
  • Gitlab插件:GitLab Plugin 和 Gitlab Hook Plugin
  • Git插件: Git plugin
  • GitBuckit插件: GitBuckit plugin
  • 簽名證書管理插件: Credentials Plugin 和Keychains and Provisioning Profiles Management
  • FTP插件: Publish over FTP
  • 腳本插件: Post-Build Script Plug-in
  • 修改Build名稱/描述(二維碼): build-name-setter / description setter plugin
  • 獲取倉庫提交的commit log: Git Changelog Plugin
  • 自定義全局變量: Environment Injector Plugin
  • 自定義郵件插件: Email Extension Plugin
  • 獲取當前登錄用戶信息: build-user-vars-plugin
  • 顯示代碼測試覆蓋率報表: Cobertura Plugin
  • 來展示生成的單元測試報表拭荤,支持一切單測框架茵臭,如junit、nosetests等: Junit Plugin
  • 其它: GIT plugin / SSH Credentials Plugin

Jenkins系統(tǒng)設置

操作: Manage Jenkins -> Configure System

  • Jenkins內(nèi)部shell UTF-8 編碼設置舅世,如下圖所示
  • Jenkins Location和Email設置旦委,如下圖所示
  • E-mail Notification奇徒,設置如下如所示
Jenkis系統(tǒng)設置3

SMTP詳細配置請參考 How to send Email at every build with Jenkins

Jenkins Jobs配置

Jobs基礎配置

配置編譯參數(shù)

例如,如果需要打包者自行選擇打包類型缨硝,如需要編譯Release/Debug/Test等不同版本的包摩钙,那需要配置Jobs的編譯參數(shù),配置方法如下圖所示:

Jenkins編譯設置-參數(shù)設置2

你還可以配置一些其它參數(shù)追葡,例如:

Jenkins編譯設置-參數(shù)設置3

配置完后腺律,build界面中就會出現(xiàn),如下如所示:

Jenkins編譯設置-參數(shù)設置1

How to configure a single Jenkins job to make the release process from trunk or branches?

配置匿名用戶權限

后面打包的應用發(fā)布時宜肉,如果懶得自己搭建服務器,就用Jenkins的翎碑,但發(fā)布出去的鏈接需要登錄才能訪問谬返,這時候你可以設置匿名用戶的訪問權限,這樣匿名用戶可以下載訪問你提供的應用鏈接了日杈,非常取巧的方法遣铝,如下圖:

Jenkins編譯設置-參數(shù)設置4.png

Jobs源碼庫配置(Gitlab為例)

配置SSH

操作: Manage Jenkins -> Credentials -> Global credentials (unrestricted) -> Add Credentials

  1. 本機生成SSH:ssh-keygen -t rsa -C "Your email" , 生成過程中需設置密碼莉擒,最終生成id_rsa和id_rsa.pub(公鑰)
  2. 本機添加秘鑰到SSH:ssh-add 文件名(需輸入管理密碼)
  3. Gitlab上添加公鑰:復制id_rsa.pub里面的公鑰添加到Gitlab
  4. Jenkins上配置密鑰到SSH:復制id_rsa.pub里面的公鑰添加到Jenkins(private key選項)

新建Job

在Jenkins中酿炸,所有的任務都是以"Job"為單位的。在進行操作前涨冀,你需要新建一個Job填硕,Job新建比較簡單,只需要在Jenkins管理的首頁左側(cè)鹿鳖,點擊“New Job”扁眯,一般選擇free-style software project,再輸入Job的名字即可翅帜。

配置Gitlab

在新建的任務(Jobs)中姻檀,Gitlab源碼配置如下圖:需要輸入git倉庫和build分支,公鑰使用上面配置SSH生成的公鑰涝滴。

Jobs觸發(fā)條件配置

Jenkins支持多種觸發(fā)器配置绣版,包括:

  • 定期進行構(gòu)建(Build periodically),定時器使用示例如下:

    H(25-30) 18 * * 1-5: 工作日下午6點25到30分之間進行build
    H 23 * * 1-5:工作日每晚23:00至23:59之間的某一時刻進行build
    H(0-29)/15 * * * *:前半小時內(nèi)每隔15分鐘進行build(開始時間不確定)
    H/20 * * * *:每隔20分鐘進行build(開始時間不確定)

  • 根據(jù)提交進行構(gòu)建(Build when a change is pushed to GitHub)

  • 定期檢測代碼更新歼疮,如有更新則進行構(gòu)建(Poll SCM)

Jobs構(gòu)建方式/編譯 配置

Jenkins支持多種編譯配置方式杂抽,包括:

  • Xcode: iOS編譯配置(安裝Xcode integration插件)
  • Invoke Gradle script: Android編譯配置(安裝Gradle plugin插件)
  • Exceute Shell: 腳本方式

對于iOS應用的構(gòu)建,如果選擇Xcode方式構(gòu)建腋妙,需要配置好開發(fā)者證書默怨,具體參考后面簽名和整數(shù)問題。
推薦使用Exceute Shell方式骤素,簡單有效匙睹。

Jobs構(gòu)建后處理

Artifacts和郵件通知配置愚屁,參考下圖

Jenkins項目設置-Archive-min

可借助Email Extension Plugin 插件進行詳細配置,具體可參考此文

Jenkins項目設置-郵件-min

發(fā)布

iOS的發(fā)布可能希望用到OTA唁桩,可參考此文

這里分享一個我寫的shell腳本模板(已開源)闭树,可以用于iOS的plist文件自動創(chuàng)建以及OTA簡單發(fā)布頁面的自動創(chuàng)建,參考此鏈接獲取源碼, 歡迎Star.

自動生成一個簡單HTML界面荒澡,如下圖报辱,點擊Install即可安裝:

Jenkis發(fā)布1

注意,這里iOS7.1以后限定必須要要用https单山,所以需要對jenkins設置下https碍现,參考下面"后記" 中的Jenkins Https設置

Last Show

構(gòu)建成功后最終的結(jié)果如下如所示:

后記

簽名和證書問題(iOS)

Jenkins Https Support

查詢Jenkins Https相關命令:

java -jar jenkins.war --help | grep -i https

說明:下面以Mac為例.

KeyStore方式

  • 生成:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass 密碼 -dname "cn=WEB" 
  • 使用:
java -jar jenkins.war --httpPort=-1 --httpsPort=8080 --httpsKeyStore=/目錄/keystore.jks --httpsKeyStorePassword=密碼
  • 注意: 第一次使用時需要將"WEB"證書導入,導入步驟為:Chrome導出證書 -> 安裝證書 -> 設置證書"全部允許"米奸, 圖解步驟可參考下面實用參考中的第5篇文章.

Certificate方式

  • 生成:
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -signkey server.key -out server.crt
  • 使用:
java -jar jenkins.war --httpsPort=8088 --httpsCertificate=/path/server.crt --httpsPrivateKey=/path/server.key
  • 注意:①同上 ②iOS手機需要導入cer證書

實用參考

Refs

更多精彩請直接訪問SkySeraph個人站點www.skyseraph.com


By SkySeraph-2016

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昼接,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悴晰,更是在濱河造成了極大的恐慌慢睡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膨疏,死亡現(xiàn)場離奇詭異一睁,居然都是意外死亡,警方通過查閱死者的電腦和手機佃却,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門者吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饲帅,你說我怎么就攤上這事复凳。” “怎么了灶泵?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵育八,是天一觀的道長。 經(jīng)常有香客問我赦邻,道長髓棋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮按声,結(jié)果婚禮上膳犹,老公的妹妹穿的比我還像新娘。我一直安慰自己签则,他們只是感情好须床,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐裂,像睡著了一般豺旬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柒凉,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天族阅,我揣著相機與錄音,去河邊找鬼膝捞。 笑死耘分,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绑警。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼央渣,長吁一口氣:“原來是場噩夢啊……” “哼计盒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芽丹,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤北启,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拔第,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咕村,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年蚊俺,在試婚紗的時候發(fā)現(xiàn)自己被綠了懈涛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡泳猬,死狀恐怖批钠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情得封,我是刑警寧澤埋心,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站忙上,受9級特大地震影響拷呆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一茬斧、第九天 我趴在偏房一處隱蔽的房頂上張望腰懂。 院中可真熱鬧,春花似錦啥供、人聲如沸悯恍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮毫。三九已至,卻和暖如春贷屎,著一層夾襖步出監(jiān)牢的瞬間罢防,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工唉侄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咒吐,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓属划,卻偏偏與公主長得像恬叹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子同眯,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容