摘要:所以一直沒能把持續(xù)集成搞起來。后來接觸到,所以嘗試了一下把持續(xù)集成搭建在上了,通過下面這幾步就可以實現(xiàn)項目有新的提交后自己編譯發(fā)布測試包到上了。
由于本人精力有限,如果內容有更新可能無法及時更新其他渠道的內容,請移步簡書 查看文章
由于之前公司項目一直迭代速度很快,幾乎隔幾天就需要發(fā)布測試包給同事們進行測試,所以希望把打包Apk這個工作交給機器來做,然后就嘗試了幾種持續(xù)集成的方案,最常見的是Jenkins,Travis,但Jenkins配置略為復雜,Travis雖然很簡單,但畢竟不支持Coding,而且費用也比較高。所以一直沒能把持續(xù)集成搞起來。
后來接觸到DaoCloudCI,所以嘗試了一下把持續(xù)集成搭建在 DaoCloud 上了,通過下面這幾步就可以實現(xiàn)CodingAndroid項目有新的提交后自己編譯發(fā)布測試包到 FIR.im 上了。
讓我們開始吧,文章發(fā)布后很多人說步驟過于復雜,其實大家僅需要使用CI功能,則可以跳過第一步,直接使用我已經編譯好的 ci-android 鏡像
1. 創(chuàng)建一個基于?Docker?的?Android?編譯環(huán)境鏡像P.S. 該項目已經托管在GitHub上,點此查看
編寫 Dockerfile 文件 添加軟件源并更新軟件列表下載文件使用到了 wget 命令,其他為安裝 Android SDK 需要依賴的一些包
在 Ubuntu 上安裝 Android SDK 的官方文檔:
http://developer.android.com/intl/zh-cn/sdk/installing/index.html?pkg=tools
RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y wget && apt-get install -y libncurses5:i386 libstdc++6:i386 zlib1g:i386 && apt-get clean安裝 JDK
鏡像包含了 Java7 和 Java8,目的是為了可以支持 Retrolambda,Android Studio 上要支持 Lambda 表達式請查看 Gradle Retrolambda Plugin 項目
# 安裝 Java 7 RUN wget -q --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz && tar -xzf jdk-7u79-linux-x64.tar.gz -C /usr/local && rm jdk-7u79-linux-x64.tar.gz && # 安裝 Java 8 wget -q --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz && tar -xzf jdk-8u66-linux-x64.tar.gz -C /usr/local && rm jdk-8u66-linux-x64.tar.gz # 配置 Java 環(huán)境變量 ENV JAVA7_HOME /usr/local/jdk1.7.0_79 ENV JAVA8_HOME /usr/local/jdk1.8.0_66 ENV JAVA_HOME /usr/local/jdk1.7.0_79 ENV PATH $PATH:$JAVA_HOME/bin安裝 Android SDK
# 安裝 Android SDK RUN wget -q http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && tar -xzf android-sdk_r24.4.1-linux.tgz -C /usr/local && rm android-sdk_r24.4.1-linux.tgz # 配置 Android SDK 環(huán)境變量 ENV ANDROID_HOME /usr/local/android-sdk-linux ENV PATH $PATH:$ANDROID_HOME/tools ENV PATH $PATH:$ANDROID_HOME/platform-tools ENV PATH $PATH:$ANDROID_HOME/build-tools/23.0.2 RUN echo yes | android update sdk --no-ui --all --filter platform-tools && echo yes | android update sdk --no-ui --all --filter build-tools-23.0.2 && echo yes | android update sdk --no-ui --all --filter android-23 && echo yes | android update sdk --no-ui --all --filter android-22 && echo yes | android update sdk --no-ui --all --filter extra-android-m2repository && echo yes | android update sdk --no-ui --all --filter extra-google-m2repository && echo yes | android update sdk --no-ui --all --filter extra-android-support安裝 Android NDK
安裝NDK會導致編譯過程漫長并且鏡像無比的大,所以只是提供了安裝的方法
# # 安裝 Android NDK # RUN wget -q http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin && # chmod a+x android-ndk-r10e-linux-x86_64.bin && # ./android-ndk-r10e-linux-x86_64.bin -o/usr/local && # rm android-ndk-r10e-linux-x86_64.bin # # 配置 Android NDK 環(huán)境變量 # ENV NDK_HOME /usr/local/android-ndk-r10e # ENV PATH $PATH:$NDK_HOME利用 Travis CI 測試編譯 Dockerfile
為了測試 Dockerfile 是否編寫正確,我使用了Travis CI的持續(xù)集成服務,目的是在我每次提交代碼時幫我編譯 Docker 鏡像,由于國內的網絡環(huán)境問題,所以像通過 wget 下載 Android SDK 這種工作幾乎是無法完成的,使用 docker build 命令幾乎也是無法完成的,所以這個工作交給國外的 CI 是最合適不過了。
添加 .travis.yml 文件到項目根目錄
sudo: required services: - docker before_install: - docker build -t lijy91/ci-android . script: - docker ps -a
以下是代碼提交后TravisCI編譯狀態(tài)
查看TravisCI的編譯狀態(tài):https://travis-ci.org/lijy91/ci-android
發(fā)布 lijy91/ci-android 到 DaoCloud 鏡像倉庫注冊 DaoCloud 并登錄
進入控制臺 代碼構建 頁面
創(chuàng)建新項目,填寫項目名稱,選擇Git倉庫
這幾步完成后臺會開啟首次構建,以后每次代碼提交后就會自動開始新的構建
P.S. 構建完成后把鏡像發(fā)布到公共倉庫,daocloud.io/lijy91/ci-android 是本人發(fā)布到公共倉庫的鏡像,大家可以直接使用
2. 為 CodingAndroid 項目開啟持續(xù)集成做準備 Fork CodingAndroid 項目Fork CodingAndroid項目并克隆到本地
官方:https://coding.net/u/coding/p/Coding-Android/git
Fork后:https://coding.net/u/lijy91/p/Coding-Android/git
順便吐槽一下 Coding 的URL路由真的好丑~
$ git clone git@git.coding.net:lijy91/Coding-Android.git確保編譯工具版本與 ci-android 安裝的保持一致
build-tools-23.0.2
android-23
項目里用的就是這兩個版本,下一步
配置并測試 FIR Gradle 插件請閱讀 FIR.im 官方關于使用 Gradle 插件的文章:[使用 Gradle Plugin 發(fā)布應用到 fir.im
](http://blog.fir.im/gradle/)
/build.gradle 部分內容已省略
buildscript { repositories { maven { url "http://maven.bughd.com/public" } ... } dependencies { ... classpath "im.fir:gradle-fir-publisher:1.0.2" ... } }
app/build.gradle 部分內容已省略
... apply plugin: "im.fir.plugin.gradle" android { compileSdkVersion 23 buildToolsVersion "23.0.2" ... // 創(chuàng)建一個證書,并配置 signingConfigs { release { storeFile file("app_release.jks") storePassword "n7yJipUzL3XQ" keyAlias "coding" keyPassword "n7yJipUzL3XQ" } } buildTypes { release { ... //需要使用正式證書簽名,才能發(fā)布到fir.im signingConfig signingConfigs.release } } ... } ... fir { apiToken "cb570ab95d2802a11387b02a65d01a42" }
測試驗證一下修改是否正確,?請使用 Gradle?Wrapper
./gradlew publishApkRelease
幾分鐘后,一個新鮮滾熱辣的包已經被發(fā)布到FIR.im上了,鏈接在此 http://fir.im/t5d6
這里再重復說一次,本人已經將上方的 Android 環(huán)境鏡像發(fā)布到DaoCloud 公共倉庫中,大家可以直接使用 daocloud.io/lijy91/ci-android 這個鏡像
image: daocloud.io/lijy91/ci-android script: - ./gradlew publishApkRelease
關于如何編寫 daocloud.yml,請閱讀DaoCloud官方文檔:daocloud.yml 的結構和寫法
提交代碼測試成后提交代碼,準備下一步
$ git add . $ git commit -m "DaoCloudCI支持" $ git push -u origin master
不過不太順利的是今天Coding有更新,導致無法 Push 代碼,估計是Merge GitCafe 時產生的 Bug!不過Coding迅速修復了,給個贊~
Coding.net Tips : [Project not found!] fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.3. 開啟持續(xù)集成(DaoCloudCI) 創(chuàng)建項目 驗證持續(xù)集成是否開啟成功
隨意修改點內容push 上去即可~~~
稍等幾分鐘,如果代碼沒有問題,新的安裝包將會被發(fā)布到 http://fir.im/t5d6 ~~
Enjoy~
關于我剛離職幾天,這段時間在整理近兩年的工作經驗,把自己一些經驗心得分享給大家,希望不斷的優(yōu)化開發(fā)體驗,改進交付方式,將更多的時間花在學習以及生活上,也希望找一份為開發(fā)者服務的工作,坐標深圳。
4年工作經驗,近2年從事Android應用開發(fā),熟悉從項目啟動到上線的完整流程,對產品及體驗有一定的理解,對Node.js及前端有著強烈的興趣,希望可以為優(yōu)化開發(fā)體驗改進交付軟件交付方式出一點微薄之力~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26540.html
摘要:來這里看看的工程師如何進行持續(xù)集成與持續(xù)部署。主要介紹了豆瓣移動持續(xù)集成和測試相關實踐,用工具化自動化社會化測試來解決遇到的問題,將打包發(fā)布環(huán)節(jié)自動化。這期的持續(xù)集成實踐分享就到這里。 我們常看到許多團隊和開發(fā)者分享他們的持續(xù)集成實踐經驗,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等項目搭建持續(xù)集成的實踐,以及一些國內外公司的內部持續(xù)集成...
閱讀 999·2019-08-30 15:55
閱讀 3440·2019-08-30 13:10
閱讀 1268·2019-08-29 18:45
閱讀 2347·2019-08-29 16:25
閱讀 2107·2019-08-29 15:13
閱讀 2423·2019-08-29 11:29
閱讀 553·2019-08-26 17:34
閱讀 1486·2019-08-26 13:57