來源:juejin.im/post/599fd5d151882524397f9fd3
本文可能是網上最全的一篇全端jenkins部署解決方案介紹的文章,一直以來,領導都想解決代碼提交和打包問題,尤其是小公司,打包流程混亂,造成線上版本和代碼庫git或svn中代碼不一致問題。加入jenkins陣營,解決眾多發包難題,顯得刻不容緩。
研究過程
剛開始,我一直在docker下安裝jenkins,按時長租用阿里的主機,用阿里容器服務做實驗,反覆創建docker容器,建立多個jenkins節點。結果發現,在容器中配置各種變量比較複雜,各種開發環境不易快速部署,當然啦,是剛開始的對jenkins研究過少造成的。
後來我採用了windows主機,配java、maven、Android環境,踩了一路坑,終於搞定了。但是我知道ios開發和編譯必須使用mac系統,本來想增加一個jenkins節點來實現ios的編譯。
當配置好之後,我突然改變了主意,與其兩臺電腦開著,不如索性把整個jenkins部署到mac系統下(畢竟我們公司暫時沒有c#工程)。於是,所有的操作,所有的環境我又折騰了一遍。
下面我逐一講解最終mac下實現全端jenkins持續集成,當然不包含c#,一路踩坑下來,我覺得這都不是事,流程都差不多。
效果圖
安裝jenkins
我個人比較喜歡新事物,所以建議使用較高版本,我使用的2.61,目前最新版是2.75。
mac下使用brew安裝,終端執行
brew install jenkins
等安裝完成後,終端運行jenkins即可啟動。
jenkins
安裝 xcode
這個比較簡單,直接從appstore下載最新版即可。安裝後,將公司項目拉入xcode,先保證項目在本機編譯,這裡我登錄了app開發者帳號,以便下載各種證書及發佈。
安裝 Android studio
這個到這裡下載www.android-studio.org/
同理將本地項目拉入,運行。這一步主要是怕開發環境引起的坑,先把項目跑起來,後面坑會少點。
進入設置,複製出sdk文件路徑,後面需要使用。我這裡是/Users/Shaolei/Library/Android/sdk
安裝git
因為我們公司用的是git,如果貴公司使用svn,則同理,只需保git或者svn命令可以敲出來即可。
我這裡的版本比較老,儘量使用新的,我懶得換了。
mac:~ shaolei$ git version
git version 2.11.0
安裝source tree
這是一個非常好用的git可視化工具,改天會具體介紹它的強大功能。
這款軟件不是必須的,只是為了方便項目拉取,所以,你可以跳過此步驟。
配置jenkins環境
這裡才是至關重要的一項,本文的核心
配置插件
1.Android Emulator Plugin
Starts an Android emulator with given properties before a build, then shuts it down after.
2.build timeout plugin
This plugin allows builds to be automatically terminated after the specified amount of time has elapsed.
3.Email Extension Plugin
This plugin is a replacement for Jenkins's email publisher
4.Gradle Plugin
This plugin allows Jenkins to invoke Gradle build>
5.Keychains and Provisioning Profiles Management
This plugin integrates management of keychain and provisioning files for iOS and OSX projects.
6.Maven Integration plugin
This plug-in provides, for better and for worse, a deep integration of Jenkins and Maven: Automatic triggers between projects depending on SNAPSHOTs, automated configuration of various Jenkins publishers (Junit, …).
7.Pipeline
A suite of plugins that lets you orchestrate automation, simple or complex. See Pipeline as Code with Jenkins for more details.
8.Pipeline: GitHub Groovy Libraries
Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub.
9.SSH Slaves plugin
Allows to launch agents over SSH, using a Java implementation of the SSH protocol.
10.Subversion Plug-in
11.Timestamper
Adds timestamps to the Console Output
12.Workspace Cleanup Plugin
This plugin deletes the project workspace after a build is finished.
13.Xcode integration
This plugin provides builders to build xcode projects, invoke agvtool and package .ipa files
其中Android Emulator Plugin、Gradle Plugin是安卓必須插件;其中Keychains and Provisioning Profiles Management、Pipeline、Xcode integration是ios編譯必須插件;
其中Maven Integration plugin、SSH Slaves plugin是maven項目必須插件,其他的Email Extension Plugin這個是為了編譯失敗的時候通知具體提交代碼開發人員郵件
配置系統設置
Local Maven Repository為maven倉庫地址;如果本機沒有安裝maven,可能需要增加maven倉庫;
下面需要加入安卓環境變量,即上文中提到的那個sdk地址;
這裡配置github地址,郵件用戶名密碼,注意發件人的郵箱必須上面jenkins註冊是管理員郵箱是一個,否則一直失敗,這裡是個坑。
增加計劃
Android 項目job
創建安卓job
配置項目的git庫地址
下面配置觸發器,每隔1分鐘檢查一次git庫,也可以使用subscribe訂閱,這裡暫不做講解。
設置編譯後,將文件拷貝到一個文件目錄。這裡使用smb協議連接到了一個內網文件服務器上,方便測試部門測試。
至於具體為何執行2次拷貝,是因為項目同時編譯測試環境地址和真實環境地址,只有連接的服務器地址不通,其他代碼都相同,具體實現可看另外一篇博文:
https://juejin.im/post/59302a0fa22b9d0058b785bc
ios項目job
和安卓相同的源代碼管理及觸發器不做介紹,請參照安卓,下文同理。
這裡需要配置ios項目的tagert,可以通過xcode打開查看,勾選Pack application and build .ipa?,使jenkins生成ipa包
配置證書地址和密碼,這裡指的是Keychain
Keychain path默認地址為/Users/shaolei/Library/Keychains/login.keychain,其中shaolei為mac登錄的用戶名,密碼就是登錄密碼。失敗時郵件發送至影響代碼的配置請參照安卓,下文同理。
同時編譯兩個ipa包請查看:
https://juejin.im/post/59648bb05188250cf956e3ef
java項目job
因為公司人員少,項目版本如果讓開發去控制,比較繁瑣,每個開發得不停的增加版本號,這裡我使用jenkins去控制版本號,這樣也方便查詢和回滾代碼。
當然啦,實現war的升級和回滾可看另外一篇文章:
https://juejin.im/post/59633a126fb9a06ba024ffdd
當然了,這裡用到了幾個關鍵詞變量,是jenkins特有的,更多變量參照下文:
h5項目job
這裡我就用了zip打包,部署時使用zip解壓到指定目錄即可。
cd ${WORKSPACE}
echo ${BUILD_NUMBER} >ver.txt
zip -r h5.zip ./ -x .git\\* -x README.md -x .project -x .gitignore
cp ${WORKSPACE}/h5.zip /Volumes/***/H5/h5-${BUILD_NUMBER}.zip
總結
本文全面講解了jenkins各項目持續繼承方案,因為涉及環境過多,坑還是比較多的,希望自行填坑。