SkySeraph July. 18th 2016html
Email:skyseraph00@163.comjava
更多精彩請直接訪問SkySeraph我的站點:www.skyseraph.com ios
1. 相關概念
Jenkins
- Jenkins,一個用Java編寫的開源的持續集成工具,提供了軟件開發的持續集成服務,可監控並觸發持續重複的工做,具備開源,支持多平臺和插件擴展,安裝簡單,界面化管理等特色。更多介紹參考維基介紹.
Gitlab
- GitLab是一個利用Ruby on Rails開發的開源應用程序,實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目,更多介紹參考維基介紹.
持續集成
- 持續集成, 簡稱CI(continuous integration).
- CI做爲敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,儘量保持高質量.
- CI一種能夠增長項目可見性,下降項目失敗風險的開發實踐。其每一次代碼更新,都要經過自動化測試來檢測代碼和功能的正確性,只有經過自動測試的代碼才能進行後續的交付和部署.
- CI 是團隊成員間(產研測)更好地協調工做,更好的適應敏捷迭代開發,自動完成減小人工干預,保證每一個時間點上團隊成員提交的代碼都能成功集成的,能夠很好的用於對Android/iOS項目的打包.
蒲公英
- 蒲公英(pgyer)爲移動開發者提供App免費測試分發應用的服務平臺,支持iOS與Android,簡單兩步分發應用。相似的還有fir.im等.
2. 流程結構
簡單繪製了下Jenkins的一個流程,以下圖:git
![](http://static.javashuo.com/static/loading.gif)
IBM Developer上也有一個看似更復雜一點的圖,以下圖
github
持續交互流程圖:
shell
3.平臺搭建
Jenkins安裝和啓動
官網: https://jenkins.io/index.html
下載: http://mirrors.jenkins-ci.org/war/latest/jenkins.war服務器
安裝:oracle
- 依賴於Java環境,首先安裝和配置Java環境
- 到官網下載Jenkins,雙擊安裝,若是是Mac電腦,會自動生成全局變量jenkins
- 修改參數: jenkins + 相關參數,如
jenkins –httpPort=8888 #更換端口號,當默認端口8080被佔用,或指定特定端口時。
啓動app
- 手動啓動: 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,以下圖所示
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
實用插件
- 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系統設置
操做: Manage Jenkins -> Configure System
- Jenkins內部shell UTF-8 編碼設置,以下圖所示
![](http://static.javashuo.com/static/loading.gif)
- Jenkins Location和Email設置,以下圖所示
![](http://static.javashuo.com/static/loading.gif)
- E-mail Notification,設置以下如所示
Jenkis系統設置3
SMTP詳細配置請參考 How to send Email at every build with Jenkins
Jenkins Jobs配置
Jobs基礎配置
配置編譯參數
例如,若是須要打包者自行選擇打包類型,如須要編譯Release/Debug/Test等不一樣版本的包,那須要配置Jobs的編譯參數,配置方法以下圖所示:
Jenkins編譯設置-參數設置2
你還能夠配置一些其它參數,例如:
Jenkins編譯設置-參數設置3
配置完後,build界面中就會出現,以下如所示:
Jenkins編譯設置-參數設置1
How to configure a single Jenkins job to make the release process from trunk or branches?
配置匿名用戶權限
後面打包的應用發佈時,若是懶得本身搭建服務器,就用Jenkins的,但發佈出去的連接須要登陸才能訪問,這時候你能夠設置匿名用戶的訪問權限,這樣匿名用戶能夠下載訪問你提供的應用連接了,很是取巧的方法,以下圖:
Jenkins編譯設置-參數設置4.png
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管理的首頁左側,點擊「New Job」,通常選擇free-style software project,再輸入Job的名字便可。
配置Gitlab
在新建的任務(Jobs)中,Gitlab源碼配置以下圖:須要輸入git倉庫和build分支,公鑰使用上面配置SSH生成的公鑰。
![](http://static.javashuo.com/static/loading.gif)
Jobs觸發條件配置
Jenkins支持多種觸發器配置,包括:
-
按期進行構建(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 :前半小時內每隔15分鐘進行build(開始時間不肯定)
H/20 :每隔20分鐘進行build(開始時間不肯定)
-
根據提交進行構建(Build when a change is pushed to GitHub)
- 按期檢測代碼更新,若有更新則進行構建(Poll SCM)
Jobs構建方式/編譯 配置
Jenkins支持多種編譯配置方式,包括:
- Xcode: iOS編譯配置(安裝Xcode integration插件)
- Invoke Gradle script: Android編譯配置(安裝Gradle plugin插件)
- Exceute Shell: 腳本方式
對於iOS應用的構建,若是選擇Xcode方式構建,須要配置好開發者證書,具體參考後面簽名和整數問題。
推薦使用Exceute Shell方式,簡單有效。
Jobs構建後處理
Artifacts和郵件通知配置,參考下圖
Jenkins項目設置-Archive-min
可藉助Email Extension Plugin 插件進行詳細配置,具體可參考此文
Jenkins項目設置-郵件-min
發佈
iOS的發佈可能但願用到OTA,可參考此文
這裏分享一個我寫的shell腳本模板(已開源),能夠用於iOS的plist文件自動建立以及OTA簡單發佈頁面的自動建立,參考此連接獲取源碼, 歡迎Star.
自動生成一個簡單HTML界面,以下圖,點擊Install便可安裝:
Jenkis發佈1
注意,這裏iOS7.1之後限定必需要要用https,因此須要對jenkins設置下https,參考下面」後記」 中的Jenkins Https設置
Last Show
構建成功後最終的結果以下如所示:
![](http://static.javashuo.com/static/loading.gif)
4. 後記
簽名和證書問題(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證書
實用參考
5. Refs
文章有更新, 請移步查看.
SYNC POST
========
By SkySeraph-2016
www.skyseraph.com