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

更多精彩請(qǐng)直接訪問(wèn)SkySeraph個(gè)人站點(diǎn)www.skyseraph.com

相關(guān)概念

Jenkins

  • Jenkins,一個(gè)用Java編寫(xiě)的開(kāi)源的持續(xù)集成工具,提供了軟件開(kāi)發(fā)的持續(xù)集成服務(wù),可監(jiān)控并觸發(fā)持續(xù)重復(fù)的工作,具有開(kāi)源,支持多平臺(tái)和插件擴(kuò)展,安裝簡(jiǎn)單,界面化管理等特點(diǎn)。更多介紹參考[維基](https://en.wikipedia.org/wiki/Jenkins_(software)介紹.

Gitlab

  • GitLab是一個(gè)利用Ruby on Rails開(kāi)發(fā)的開(kāi)源應(yīng)用程序,實(shí)現(xiàn)一個(gè)自托管的Git項(xiàng)目倉(cāng)庫(kù),可通過(guò)Web界面進(jìn)行訪問(wèn)公開(kāi)的或者私人項(xiàng)目,更多介紹參考維基介紹.

持續(xù)集成

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

OTA

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

蒲公英

  • 蒲公英(pgyer)為移動(dòng)開(kāi)發(fā)者提供App免費(fèi)測(cè)試分發(fā)應(yīng)用的服務(wù)平臺(tái),支持iOS與Android,簡(jiǎn)單兩步分發(fā)應(yīng)用。類似的還有fir.im等.

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

簡(jiǎn)單繪制了下Jenkins的一個(gè)流程,如下圖:

IBM Developer上也有一個(gè)看似更復(fù)雜一點(diǎn)的圖,如下圖

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


平臺(tái)搭建

Jenkins安裝和啟動(dòng)

官網(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電腦,會(huì)自動(dòng)生成全局變量jenkins
  • 修改參數(shù): jenkins + 相關(guān)參數(shù),如
    jenkins --httpPort=8888 #更換端口號(hào),當(dāng)默認(rèn)端口8080被占用,或指定特定端口時(shí)。

啟動(dòng)

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

Jenkins插件安裝

插件安裝

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

實(shí)用插件

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

Jenkins系統(tǒng)設(shè)置

操作: Manage Jenkins -> Configure System

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

SMTP詳細(xì)配置請(qǐng)參考 How to send Email at every build with Jenkins

Jenkins Jobs配置

Jobs基礎(chǔ)配置

配置編譯參數(shù)

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

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

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

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

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

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

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

配置匿名用戶權(quán)限

后面打包的應(yīng)用發(fā)布時(shí),如果懶得自己搭建服務(wù)器,就用Jenkins的,但發(fā)布出去的鏈接需要登錄才能訪問(wèn),這時(shí)候你可以設(shè)置匿名用戶的訪問(wèn)權(quán)限,這樣匿名用戶可以下載訪問(wèn)你提供的應(yīng)用鏈接了,非常取巧的方法,如下圖:

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

Jobs源碼庫(kù)配置(Gitlab為例)

配置SSH

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

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

新建Job

在Jenkins中,所有的任務(wù)都是以"Job"為單位的。在進(jìn)行操作前,你需要新建一個(gè)Job,Job新建比較簡(jiǎn)單,只需要在Jenkins管理的首頁(yè)左側(cè),點(diǎn)擊“New Job”,一般選擇free-style software project,再輸入Job的名字即可。

配置Gitlab

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

Jobs觸發(fā)條件配置

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

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

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

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

  • 定期檢測(cè)代碼更新,如有更新則進(jìn)行構(gòu)建(Poll SCM)

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

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

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

對(duì)于iOS應(yīng)用的構(gòu)建,如果選擇Xcode方式構(gòu)建,需要配置好開(kāi)發(fā)者證書(shū),具體參考后面簽名和整數(shù)問(wèn)題。
推薦使用Exceute Shell方式,簡(jiǎn)單有效。

Jobs構(gòu)建后處理

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

Jenkins項(xiàng)目設(shè)置-Archive-min

可借助Email Extension Plugin 插件進(jìn)行詳細(xì)配置,具體可參考此文

Jenkins項(xiàng)目設(shè)置-郵件-min

發(fā)布

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

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

自動(dòng)生成一個(gè)簡(jiǎn)單HTML界面,如下圖,點(diǎn)擊Install即可安裝:

Jenkis發(fā)布1

注意,這里iOS7.1以后限定必須要要用https,所以需要對(duì)jenkins設(shè)置下https,參考下面"后記" 中的Jenkins Https設(shè)置

Last Show

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

后記

簽名和證書(shū)問(wèn)題(iOS)

Jenkins Https Support

查詢Jenkins Https相關(guān)命令:

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

說(shuō)明:下面以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=密碼
  • 注意: 第一次使用時(shí)需要將"WEB"證書(shū)導(dǎo)入,導(dǎo)入步驟為:Chrome導(dǎo)出證書(shū) -> 安裝證書(shū) -> 設(shè)置證書(shū)"全部允許", 圖解步驟可參考下面實(shí)用參考中的第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手機(jī)需要導(dǎo)入cer證書(shū)

實(shí)用參考

Refs

更多精彩請(qǐng)直接訪問(wèn)SkySeraph個(gè)人站點(diǎn)www.skyseraph.com


By SkySeraph-2016

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容