構建持續集成平臺

jopen 8年前發布 | 19K 次閱讀 項目構建

  • 背景

    scrum的敏捷開發當中有很多促進項目推進的辦法和方案, 可以最大限度的利用開發人員有限的時間,但是只停留在管理 方式、交流溝通方式等組織實踐上面。一方面要快速迭代、快速容錯, 另一方面又要因為持續需要有產品構建,開發人員不得不每天 多次重復的構建代碼、測試代碼、部署代碼。

    這一方面我們借鑒XP(什么是XP)中 的編程實踐手段,利用持續集成技術什么是持續集成),測試驅動開發(TDD),結對編程 來支撐敏捷開發的項目推進。

  • 索引

  • java篇

  • ios篇

  • android篇

  • 選擇構建工具

    我簡單總結了一下幾個開源持續集成工具(詳細的比較可以移步點我):

    • Jenkins 使用java語言編寫 良好的插件環境,支持擴展
    • Buildbot python語言開發的項目 已經為Mozilla、Webkit、Chromium所支持
    • Travis 適合新手 提供Saas 接入github賬戶
    • Strider 由node.js+javascript編寫 需要安裝mongodb和node.js 需要編寫腳本 上手困難
    • Drone 開源的,支持各種語言的CI工具 但是你的項目必須是開源的 https://drone.io

    綜上,公司項目中涉及到ios、android、java三種環境,并且代碼并不開 源,所以在持續構建工具中使用Jenkins再合適不過。此外Jenkins 有很好地擴展能力,有很健全的插件支持各種環境的代碼構建。 Jenkins本身是java實現,在tomcat中就能很好地運行, 這一點比較適合java出身的開發同仁。

  • java項目的自動化構建

    在linux環境下安裝Jenkins有兩種方式:

    1.sudo java -jar jenkins.war –httpPort=18080 –ajp13Port=18009

    2.yum install jenkins

    第一種方式下,如果你是SSH連接到linux主機,當你關閉連接的時候,這個命令也會被中斷;

    第二種方式,是在CentOS系統中使用yum命令安裝(熟悉CentOS系統的人應該不陌生),安裝完成之后, Jenkins會成為系統中的一個service,只要在命令行執行service jenkins start|stop|restart 就可以完成服務的啟動停止和重啟。

    配置文件路徑為:/etc/sysconfig/jenkins,可能需要root權限。配置文件中主要需要修改的是啟動 端口JENKINS_PORT (默認是8080),使用jenkins的用戶JENKINS_USER(默認生成一個jenkins)。 我這里的用戶是cms,端口是8818,

    JENKINS_USER=“cms”
    JENKINS_AJP_PORT=“8819”

    修改jenkins涉及到的目錄和文件的權限所屬:

    sudo chown -R cms /usr/lib/jenkins
    sudo chgrp -R cms /usr/lib/jenkins
    sudo chown -R cms /var/log/jenkins
    sudo chgrp -R cms /var/log/jenkins
    sudo chown -R cms /var/lib/jenkins
    sudo chgrp -R cms /var/lib/jenkins
    sudo chown -R cms /var/cache/jenkins
    sudo chgrp -R cms /var/cache/jenkins

    之后就可以啟動Jenkins了,執行命令sudo service jenkins start

    show

    jenkins安裝好之后,首先需要確認你本地是否有:

    Maven 負責編譯java代碼
    Git 負責從代碼管理服務器中拉取最新提交的代碼
    JDK 這個就不用說了,你沒有jenkins你也安裝不了

    好了,這里就不贅述以上工具的環境變量的配置了,一定要有。

    打開Jenkins主界面,首先下載構建所需的插件,依次進入系統管理-管理插件,下載:

    GIT plugin
    Maven Integration plugin
    Email Extension Plugin (對jenkins自帶郵件通知的擴展,可以自定義郵件模板)

    配置Jenkins 系統管理-系統設置

    這里主要是對maven、Git、JDK的路徑做一些配置

    system-config

    如果你下載了Email Extension Plugin插件,在系統配置中可以設置你想要的郵件通知屬性

    email-config

    系統配置之后,回到主界面,選擇新建,填寫Item名稱,選擇構建一個maven項目

    create-job

    下一步,源碼管理中填入你拉取代碼的git地址,可以是HTTP協議,也可以是SSH。當然,如果是HTTP,要有 對應的用戶名和密碼;如果是SSH,用戶名和密碼是git版本管理所在的服務器主機的用戶名和密碼, 并且需要在git版本管理器所在服務器上添加ssh登錄的auto文件中添加公鑰 private key是jenkins所在主機的用戶私鑰。

    config-git

    構建觸發器中勾選Build whenever a SNAPSHOT dependency is builtPoll SCM 這樣構建的觸發器,會每三分鐘(H/3 * * * *)輪詢一遍你的代碼庫,只要你往git的develop 分支中commit代碼,Jenkins就會構建一次

    config-trigger

    編譯使用的是maven,所以要確定到maven的pom文件和執行命令,如圖

    config-build

    添加構建后的動作,比如你希望執行什么shell、郵件通知到developer 或者管理員等

    config-email

    這里打包好的文件在你的Jenkins主目錄/var/lib/jenkins下地workspace里面,并且會保留 你每一次的構建代碼包,有關構建結束的部署工作,你可以自己寫shell腳本執行,也可以在pom文件中 寫有關tomcat的插件屬性,利用maven直接將代碼部署到tomcat的部署目錄下(其中也涉及到訪問權限 的問題,這里就不展開描述了)。

    回到主目錄,你的構建job會在job list中顯示,其中S的顏色用來區分你構建失敗還是成功, 藍色是成功,紅色是失敗;W表示你最近幾次構建的情況

    show-jobs

    除了自動觸發構建任務,你也可以手動計劃一次構建

    build-list

    下圖為每次測試結果的一個統計圖:

    show-test

    在變更記錄中,能看到每次構建中,提交了哪些代碼,commit的comments,誰提交的等等

    show-summary

    更具體的構建信息可以查看Console Output ,如下圖:

    show-console

    讓我很舒服的是,當Jenkins自動構建完成之后,我會收到一個郵件提醒

    show-email

    最后,別讓你的系統誰都可以訪問,用戶權限在首頁-> 系統管理-> Configure Global Security里配置。

  • ios項目的自動化構建

    在Mac上安裝Jenkins比較方便,只要從官網上下載dmg安裝包就可以。

    注意:如果你Mac上得JDK不是1.7+,安裝會失敗。

    卸載Jenkins執行:/Library/Application Support/Jenkins/Uninstall.command

    安裝之后,Mac上會多出一個用戶:Jenkins,如果你想更改成為你的用戶來執行Jenkins,先停掉jenkins, 更改配置文件,再重啟jenkins服務(launchctl有點像linux的Service),如下執行:

    sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

    sudo vim +1 +/daemon +'s/daemon/staff/' +/daemon +'s/daemon/bixiaopeng' +wq org.jenkins-ci.plist

    sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

    別忘了修改日志目錄的用戶權限和主目錄的用戶權限。

    ios的app構建需要有xcode環境,所以你的部署一定是臺mac電腦,但我們做的也是自動構建,所以必然不能使用 xcode可視化工具進行構建,所以我嘗試了xcodebuild,大概步驟是:build->archive->IPA

    xcodebuild -alltargets clean

    xcodebuild -target HelloJenkins PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CONFIGURATION_BUILD_DIR=JenkinsBuild

    xcodebuild -scheme HelloJenkins archive PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CODE_SIGN_IDENTITY="iPhone Developer: Justin Hyland (XXXXXXXXXX)" -archivePath ./JenkinsArchive/HelloJenkins.xcarchive

    xcodebuild -exportArchive -exportFormat IPA -exportProvisioningProfile iOS\ Team\ Provisioning\ Profile:\ com.yourAPP.HelloJenkins -archivePath ./JenkinsArchive/HelloJenkins.xcarchive -exportPath ./JenkinsIPAExport/HelloJenkins.ipa

    詳見:http://www.cnblogs.com/rosepotato/p/3884851.html

    但是構建并沒有想象當中的順利,如果你使用了第三方的jar包,總是會報錯:

    no provisioning profile matches ‘xxx’

    通過調研,發現xcodebuild可以通過workspace文件構建,可以避開這些問題, 前提是你有scheme文件,跟ios的同時溝通完之后,他每次提交代碼都會share scheme 文件上來。構建偶爾成功,但是還是頻頻報錯。

    xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme SYMROOT=$(PWD)/build

    最后的構建成功是借鑒了劉先寧在InfoQ上的一篇文章(構建iOS持續集成平臺(一)——自動化構建和依賴管理

    實際上是使用到了非死book給出的替代xcodebuild的解決方案xctool 頓時感覺,我之前就好像一直在用javac編譯java代碼,而不知道還有maven這個東西。 通過xctool和cocoapod,代碼構建成功。

    xctool -workspace SDJG.xcworkspace -scheme SDJG clean

    xctool -workspace SDJG.xcworkspace -scheme SDJG build SYMROOT=$(PWD)/JenkinsBuild

    xcrun -sdk iphoneos PackageApplication -v bbbuild/Debug-iphoneos/SDJG.app -o /Users/fangrichird/git/shangde1216/JenkinsIPAExport/SDJG.ipa

    ios項目也就只停留在IPA這里了,因為TestFlight自從被蘋果收購之后, 再不能通過jenkins的插件完成上傳。解決辦法停留在手動將IPA發向各種云 服務平臺,或者直接用iTunes安裝到測試機當中。

    至于jenkins用到的插件和其他環境部署,請參考 java篇

  • Android項目的自動化構建

    Android的集成部署相對來說比較簡單,跟我們的android工程師溝通,他們習慣使用 Android studio這種集成的ide,如果部署,有集成在IDE中的Gradle。

    所以想要在linux上構建Android代碼,只需要兩件事情:

    1.安裝Android SDK;
    2.配置Gradle環境;(JDK環境就不用說了吧)

    other和java篇的配置相同,只是再需要安裝一個Gradle插件,如果 你需要向不同的應用市場打包,在Gradle的配置文件中配置就好了。

來自: http://mojito515.github.io/blog/2015/12/21/yong-jenkinsshi-xian-chi-xu-ji-cheng-de-da-jian/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!