Jenkins Gitlab持續集成打包平臺搭建

原文地址:http://skyseraph.com/2016/07/18/Tools/Jenkins%20Gitlab%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E6%89%93%E5%8C%85%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA/html

目錄java

  1. 1. 相關概念2. 流程結構
    1. 1.1. Jenkins
    2. 1.2. Gitlab
    3. 1.3. CI
    4. 1.4. OTA
    5. 1.5. pgyer
  2. 3. 平臺搭建
    1. 3.1. Jenkins安裝和啓動
    2. 3.2. Jenkins插件安裝
    3. 3.3. Jenkins系統設置
    4. 3.4. Jenkins Jobs配置
      1. 3.4.1. Jobs基礎配置
      2. 3.4.2. Jobs源碼庫配置(Gitlab爲例)
      3. 3.4.3. Jobs觸發條件配置
      4. 3.4.4. Jobs構建方式/編譯 配置
      5. 3.4.5. Jobs構建後處理
  3. 4. 後記5. Refs
    1. 4.1. 簽名和證書問題(iOS)
    2. 4.2. 郵件發送失敗
    3. 4.3. Jenkins Https Support
  4. 6. 後記

 

相關概念

Jenkins

  • Jenkins,一個用Java編寫的開源的持續集成工具,提供了軟件開發的持續集成服務,可監控並觸發持續重複的工做,具備開源,支持多平臺和插件擴展,安裝簡單,界面化管理等特色。更多介紹參考維基介紹.

Gitlab

  • GitLab是一個利用Ruby on Rails開發的開源應用程序,實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目,更多介紹參考維基介紹.

CI

  • 持續集成, 簡稱CI(continuous integration).
  • CI做爲敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,儘量保持高質量.
  • CI一種能夠增長項目可見性,下降項目失敗風險的開發實踐。其每一次代碼更新,都要經過自動化測試來檢測代碼和功能的正確性,只有經過自動測試的代碼才能進行後續的交付和部署.
  • CI 是團隊成員間(產研測)更好地協調工做,更好的適應敏捷迭代開發,自動完成減小人工干預,保證每一個時間點上團隊成員提交的代碼都能成功集成的,能夠很好的用於對Android/iOS項目的打包.

OTA

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

pgyer

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

流程結構

簡單繪製了下Jenkins的一個流程,以下圖:ios

IBM Developer上也有一個看似更復雜一點的圖,以下圖
git

持續交互流程圖:
github

平臺搭建

Jenkins安裝和啓動

官網https://jenkins.io/index.html
下載http://mirrors.jenkins-ci.org/war/latest/jenkins.war shell

安裝: 服務器

  • 依賴於Java環境,首先安裝和配置Java環境
  • 官網下載Jenkins,雙擊安裝,若是是Mac電腦,會自動生成全局變量jenkins
  • 修改參數: jenkins + 相關參數,如
    jenkins –httpPort=8888 #更換端口號,當默認端口8080被佔用,或指定特定端口時。

啓動 oracle

  • 手動啓動: 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插件安裝

插件安裝app

操做: 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系統設置

操做: Manage Jenkins -> Configure System

  • Jenkins內部shell UTF-8 編碼設置,以下圖所示

  • Jenkins Location和Email設置,以下圖所示

  • E-mail Notification,設置以下如所示

Jenkis系統設置3Jenkis系統設置3

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

Jenkins Jobs配置

Jobs基礎配置

配置編譯參數

例如,若是須要打包者自行選擇打包類型,如須要編譯Release/Debug/Test等不一樣版本的包,那須要配置Jobs的編譯參數,配置方法以下圖所示:

Jenkins編譯設置-參數設置2Jenkins編譯設置-參數設置2

你還能夠配置一些其它參數,例如:

Jenkins編譯設置-參數設置3Jenkins編譯設置-參數設置3

配置完後,build界面中就會出現,以下如所示:

Jenkins編譯設置-參數設置1Jenkins編譯設置-參數設置1

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

配置匿名用戶權限

後面打包的應用發佈時,若是懶得本身搭建服務器,就用Jenkins的,但發佈出去的連接須要登陸才能訪問,這時候你能夠設置匿名用戶的訪問權限,這樣匿名用戶能夠下載訪問你提供的應用連接了,很是取巧的方法,以下圖:

Jenkins編譯設置-參數設置4.pngJenkins編譯設置-參數設置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管理的首頁左側,點擊「New Job」,通常選擇free-style software project,再輸入Job的名字便可。

配置Gitlab

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

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-minJenkins項目設置-Archive-min

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

Jenkins項目設置-郵件-minJenkins項目設置-郵件-min

發佈

固然,若是不想本身的應用發佈到三方網站,只但願在本身的內網上託管,這樣須要在本身內網上搭建服務器,服務器搭建方式有不少種,Mac上能夠用自帶的Apache服務,也能夠用其它服務。

iOS的發佈可能但願用到OTA,可參考此文 還有這篇一步一步實現無線安裝iOS應用(內網OTA)

這裏分享一個我寫的shell腳本模板(已開源),能夠用於iOS的plist文件自動建立以及OTA簡單發佈頁面的自動建立,參考此連接獲取源碼, 歡迎Star.

自動生成一個簡單HTML界面,以下圖,點擊Install便可安裝:

Jenkis發佈1Jenkis發佈1

注意,這裏iOS7.1之後限定必需要要用https,因此須要對jenkins設置下https,參考下面」後記」 中的Jenkins Https設置

Last Show

構建成功後最終的結果以下如所示:

後記

簽名和證書問題(iOS)

郵件發送失敗

  • 實際搭建過程當中有遇到此問題,折騰了小會,還覺得是公司郵箱地址爲題,後面發現僅僅是一個小配置問題。
  • Extended E-mail Notification中也須要和E-mail Notification同樣,點擊Advanced,而後選擇Use SMTP Authentication,配置同E-mail Notification的參數。

Jenkins Https Support

查詢Jenkins Https相關命令:

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

說明:下面以Mac爲例.

KeyStore方式

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

Certificate方式

  • 生成:
1
2
3
4
5
sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr
sudo openssl genrsa -out ca.key 1024
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
  • 使用:

啓動Jenkins:

1
java -jar jenkins.war --httpsPort=8088 --httpsCertificate=/path/server.crt --httpsPrivateKey=/path/server.key
  • 注意/說明:
    1 同上
    2 iOS手機須要導入cer證書(ca.crt)
    3 Common Name 填寫IP地址或域名地址
    4 第5步驟若是提提示「I am unable to access the ./demoCA/newcerts directory」 錯誤,解決方法爲:
    在當前操做目錄,新建demoCA\newcerts2層文件夾
    而後再demoCA文件夾下新建一個空的index.txt文件
    再新建一個serial文件,沒有後綴。裏面填入01

實用參考

Refs

後記

本文首發於skyseraph.com「Jenkins Gitlab持續集成打包平臺搭建」
同步發表/轉載 cnBlogs / CSDN / …

相關文章
相關標籤/搜索