更多精彩請直接訪問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奇徒,設置如下如所示
SMTP詳細配置請參考 How to send Email at every build with Jenkins
Jenkins Jobs配置
Jobs基礎配置
配置編譯參數(shù)
例如,如果需要打包者自行選擇打包類型缨硝,如需要編譯Release/Debug/Test等不同版本的包摩钙,那需要配置Jobs的編譯參數(shù),配置方法如下圖所示:
你還可以配置一些其它參數(shù)追葡,例如:
配置完后腺律,build界面中就會出現(xiàn),如下如所示:
How to configure a single Jenkins job to make the release process from trunk or branches?
配置匿名用戶權限
后面打包的應用發(fā)布時宜肉,如果懶得自己搭建服務器,就用Jenkins的翎碑,但發(fā)布出去的鏈接需要登錄才能訪問谬返,這時候你可以設置匿名用戶的訪問權限,這樣匿名用戶可以下載訪問你提供的應用鏈接了日杈,非常取巧的方法遣铝,如下圖:
Jobs源碼庫配置(Gitlab為例)
配置SSH
操作: Manage Jenkins -> Credentials -> Global credentials (unrestricted) -> Add Credentials
- 本機生成SSH:ssh-keygen -t rsa -C "Your email" , 生成過程中需設置密碼莉擒,最終生成id_rsa和id_rsa.pub(公鑰)
- 本機添加秘鑰到SSH:ssh-add 文件名(需輸入管理密碼)
- Gitlab上添加公鑰:復制id_rsa.pub里面的公鑰添加到Gitlab
- 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和郵件通知配置愚屁,參考下圖
可借助Email Extension Plugin 插件進行詳細配置,具體可參考此文
發(fā)布
- FTP服務器, 最傳統(tǒng)的方式痕檬,可助蒲公英或者fir.im(安裝對應的Jenkins插件)霎槐。
- 專業(yè)的Artifacts存儲倉庫, 比如Nexus, Artifactory等。
- 對象存儲服務:比如阿里云OSS梦谜,AWS S3等丘跌,以阿里云為例,具體請參考此文 在Jenkins持續(xù)集成方案中使用阿里云OSS作為Artifacts倉庫
iOS的發(fā)布可能希望用到OTA唁桩,可參考此文
這里分享一個我寫的shell腳本模板(已開源)闭树,可以用于iOS的plist文件自動創(chuàng)建以及OTA簡單發(fā)布頁面的自動創(chuàng)建,參考此鏈接獲取源碼, 歡迎Star.
自動生成一個簡單HTML界面荒澡,如下圖报辱,點擊Install即可安裝:
注意,這里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證書
實用參考
- Starting and Accessing Jenkins 官網(wǎng)說明
- Jenkins: Switch to SSL/ HTTPS mode 支持HTTPS的兩種方式
- Installing and Configuring Jenkins KeyStore方式
- Generating a self-signed SSL certificate using the Java keytool command (2004193) KeyStore方式
- Setup Self-Signed Certificates & Trusting them on OS X Certificate方式
- 免費openssl生成ssl證書 Certificate方式
Refs
- Using Jenkins
- Building a software project
- Auto build and deploy iOS apps using Jenkins
- Continuous Integration for iOS with Jenkins
- GitLab Documentation
- Setup Jenkins + TestFlight for iOS apps
- Installing Jenkins on OS X Yosemite
- 基于 Jenkins 快速搭建持續(xù)集成環(huán)境
- Jenkins入門
- jenkins中集成OTA發(fā)布
更多精彩請直接訪問SkySeraph個人站點:www.skyseraph.com
By SkySeraph-2016