Travis CI 邂逅 GitHub价脾、Maven牧抵、Fir.im

這篇文章的目的很簡單,就是要實(shí)現(xiàn)當(dāng)我們在 GitHub 上創(chuàng)建應(yīng)用或庫的時(shí)候侨把,Travis CI 可以幫助我們構(gòu)建工程犀变,可以把應(yīng)用每次打的tag提交到 GitHub 的 releases 上妹孙,也可以把庫構(gòu)建完的每次版本提交到 Maven 上,還可以把應(yīng)用發(fā)布到 Fir.im 上弛作,成功或失敗郵件通知我們涕蜂。

目錄

  • Travis CI
    • Travis CI 是什么?
    • Travis CI 配置
    • .travis.yml 中的屬性
  • 構(gòu)建中涉及到的證書及密碼問題
  • 提交到 GitHub 的 releases
  • 提交到 Maven
  • 發(fā)布到 Fir.im
  • 通知開發(fā)者
  • 其它
    • git tag
    • studio 3.0 前后的打包
    • gradlew 的命令
    • 個(gè)人應(yīng)用示例

Travis CI 是什么映琳?

Travis CI 是一種自動化持續(xù)集成工具机隙,類似于公司經(jīng)常使用的 Jenkins,但是 Travis CI 運(yùn)行在云端支持 GitHub萨西,我們可以用 Travis CI 做很多的事情有鹿,所以使用該工具完全可以滿足我們的需求,解決我們的痛點(diǎn)谎脯。

Travis CI 配置

首先第一步你需要到 travis-ci.org 網(wǎng)站上用你的 GitHub 帳號注冊登錄葱跋,需要注意的是 Travis 分為開源項(xiàng)目版本與付費(fèi)項(xiàng)目版本。

開源版本域名:https://travis-ci.org?
付費(fèi)版本域名:https://travis-ci.com

我們使用免費(fèi)的版本就可以了源梭,登錄成功后娱俺,Travis 會同步你的 GitHub 倉庫,如果你想為你的 GitHub 開源項(xiàng)目添加 Travis 持續(xù)集成废麻,打開項(xiàng)目名字前面的開關(guān)就可以了荠卷。

第二步就是在本地配置 Travis 了,當(dāng)前我的 Travis 版本是1.8.8烛愧,安裝命令如下:

$ gem install travis -v 1.8.8

安裝中可能遇到各種各樣的問題油宜,比如依賴其它的配置如ruby,或者travis鏡像同步不下來怜姿,I believe you can fix it. 安裝完畢后慎冤,檢驗(yàn)一下是否成功:

$ travis -v

.travis.yml 中的屬性

配置完 Travis 后,第三步在你項(xiàng)目的根目錄下新建一個(gè) .travis.yml 文件沧卢,編輯完后需要提交到 GitHub 上蚁堤,下面我們先添加一下基本信息,需要注意的是 Travis 對格式很敏感的但狭。

你可以查看他們的文檔披诗,配置 Android 項(xiàng)目的地址:?https://docs.travis-ci.com/user/languages/android/,我項(xiàng)目的基本配置如下:

language: android
jdk: oraclejdk8
sudo: true

android:
  components:
  - tools
  - platform-tools
  - tools
  - build-tools-27.0.3
  - android-27
  - sys-img-armeabi-v7a-android-27
  - extra-android-support
  - extra-android-m2repository
  - extra-google-m2repository
  - add-on
  - extra
  licenses:
  - android-sdk-preview-license-52d11cd2
  - android-sdk-license-.+
  - google-gdk-license-.+

Travis CI 在執(zhí)行構(gòu)建的時(shí)候也是有生命周期的熟空,比如下面這些見名知意Hook住構(gòu)建過程的方法:

before_cache: 緩存之前
  ...
cache: 緩存的時(shí)候
  ...
before_install: 安裝之前
  ...
before_script: 執(zhí)行命令之前
  ....
script: 執(zhí)行命令的時(shí)候
  ...
deploy: 部署的時(shí)候
  ...
after_deploy: 部署之后
  ...
notifications: 通知的時(shí)候
  ...

“...” 就是我們要添加的構(gòu)建命令,完成這些命令就可以解決我們的目的了搞莺,比如讓我們的構(gòu)建任務(wù)支持緩存息罗,一般指定在.gradle目錄下的緩存,如下:

before_cache:
- rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/

cache:
  directories:
  - "$HOME/.gradle/caches/"
  - "$HOME/.gradle/wrapper/"
  - "$HOME/.android/build-cache"

構(gòu)建中涉及到的證書及密碼問題

首先可能你不想將簽名文件傳到 GitHub 上才沧,那么我門將簽名文件加密迈喉,將加密后的文件上傳就可以了绍刮,加密的命令:

$ travis encrypt-file /../keystore.jks --add

該命令執(zhí)行完后,會在你的 .travis.yml 文件中追加以下信息:

before_install:
- openssl aes-256-cbc -K $encrypted_634573b3a4f8_key -iv $encrypted_634573b3a4f8_iv
  -in signings/keystore.jks.enc -out signings/keystore.jks -d

還會在 https://travis-ci.org/你的GitHub名稱/你的項(xiàng)目名稱/settings 下面添加加密后的key和value挨摸,執(zhí)行完上面的加密命令后你可以去查看下孩革,除了這個(gè)證書的問題,涉及到提交到 Maven 和發(fā)布到 Fir.im 都需要相應(yīng)的 token得运,這些token信息也是不應(yīng)該外泄的膝蜈,我們可以手動在那下面添加這些信息,再需要執(zhí)行對應(yīng)命令的時(shí)候通過 $XXX_TOKEN 引用即可熔掺。

提交到 GitHub 的 releases

下面就是配置 Travis CI 自動發(fā)布apk文件到 Github releases 上的命令饱搏,執(zhí)行如下命令:

$ travis setup releases

執(zhí)行完這個(gè)命令,Travis 同樣會在你的 .travis.yml 文件下追加如下信息:

deploy:
  provider: releases
  api_key:
    secure: 生成的Key
  file: 你輸入的apk路徑
  on:
    repo: 你的工程

你可以查看下.travis.yml 文件置逻,但是這些信息還不夠推沸,我們還要人為的添加如下命令:

deploy:
  skip_cleanup: true
  on:
    tags: true
    all_branches: true

skip_cleanup:這個(gè)命令很重要,默認(rèn)情況下 Travis CI 在完成編譯后會清除所有生成的文件券坞,因此需要設(shè)置 skip_cleanup: true 來忽略此操作鬓催,否則他會找不到你的apk如果你默認(rèn)生成的apk路徑在build目錄下的話。
on:發(fā)布的時(shí)機(jī)恨锚,我的設(shè)置是 tags: true宇驾,即只在有打tag的情況下才會部署發(fā)布。

提交到 Maven

我的庫都是通過 https://github.com/novoda/bintray-release 提交到 jcenter 上的眠冈,bintray-release 的使用很簡單飞苇,請自行解決哈,如果前面配置的都沒問題蜗顽,我們只需配置一行命令就可以發(fā)布我們的庫:

after_deploy:
- "./gradlew clean build bintrayUpload -PbintrayUser=sfsheng0322 -PbintrayKey=$BINTRAY_TOKEN -PdryRun=false"

發(fā)布到 Fir.im

關(guān)于 fie-cli 插件更多的信息布卡,請?jiān)L問 https://github.com/FIRHQ/fir-cli,我的配置如下:

before_install:
- gem install fir-cli
after_deploy:
- fir p app/release/Gank.IO.apk -T $FIR_TOKEN -c "`git cat-file tag $TRAVIS_TAG`"

通知開發(fā)者

配置下你的郵箱就可以了雇盖,構(gòu)建完成需要部署的話忿等,成功或失敗都會郵件通知你的。

notifications:
  email:
  - sfsheng0322@126.com

git tag

最后一步崔挖,打個(gè) tag贸街,讓 Tavis 跑起來,構(gòu)建我們的項(xiàng)目狸相,該提交提交薛匪,該發(fā)布發(fā)布。

查看tag
git tag

//打tag  
$ git tag -a V1.0.0 -m "注釋"  
$ git push origin V1.0.0  

//刪除本地tag  
$ git tag -d V1.0.0

//刪除遠(yuǎn)程tag  
$ git push origin --delete tag V1.0.0

studio 3.0 前后的打包

android studio 3.0 之前 gradle 簡單的打包腳本

def generateApkBefore3_0(variant) {
    variant.outputs.each { output ->
        output.outputFile = new File(project.rootDir.absolutePath + "/app/outputs", "XXX.apk")
    }
}

android studio 3.0 之后 gradle 簡單的打包腳本

def generateApkAfter3_0(variant) {
    if (variant.buildType.name == "release") {
        variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/app/outputs")
        variant.getPackageApplication().outputScope.apkDatas.forEach { apkData ->
            apkData.outputFileName = "XXX.apk"
        }
    }
}

gradlew 的命令

$ ./gradlew assemble //為所有構(gòu)建類型創(chuàng)建apk  
$ ./gradlew check //運(yùn)行所有的檢查脓鹃,比如說Android Lint逸尖,如果發(fā)現(xiàn)問題可終止任務(wù)  
$ ./gradlew build //運(yùn)行以上兩個(gè)任務(wù)  
$ ./gradlew clean //清除生成的apk  
$ ./gradlew connectedCheck //在設(shè)備上運(yùn)行測試  
$ ./gradlew deviceCheck //遠(yuǎn)程設(shè)備運(yùn)行測試  
$ ./gradlew installDebug/installRelease //在設(shè)備商安裝指定版本  
$ ./gradlew uninstall //卸載應(yīng)用  

個(gè)人應(yīng)用示例

下面我的兩個(gè)庫都應(yīng)用了 Travis CI,看完這篇文章如果您有這個(gè)需求,請參考:

GroupRecyclerViewAdapter
可增刪改查娇跟、可展開收起的分組列表岩齿,輕松幫你實(shí)現(xiàn)【微信-我】等類似頁面,動態(tài)可配置苞俘。
?地址: https://github.com/sfsheng0322/GroupRecyclerViewAdapter

FirUpdater
Fir.im通道APK更新器盹沈,使用簡單,讓自己的demo快速具備升級功能吃谣。
地址: https://github.com/sfsheng0322/FirUpdater

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乞封,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子基协,更是在濱河造成了極大的恐慌歌亲,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澜驮,死亡現(xiàn)場離奇詭異陷揪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)杂穷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門悍缠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耐量,你說我怎么就攤上這事飞蚓。” “怎么了廊蜒?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵趴拧,是天一觀的道長。 經(jīng)常有香客問我山叮,道長著榴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任屁倔,我火速辦了婚禮脑又,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锐借。我一直安慰自己问麸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布钞翔。 她就那樣靜靜地躺著严卖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪布轿。 梳的紋絲不亂的頭發(fā)上哮笆,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天俺亮,我揣著相機(jī)與錄音,去河邊找鬼疟呐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛东且,可吹牛的內(nèi)容都是我干的启具。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼珊泳,長吁一口氣:“原來是場噩夢啊……” “哼鲁冯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起色查,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薯演,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秧了,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跨扮,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年验毡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衡创。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晶通,死狀恐怖璃氢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狮辽,我是刑警寧澤一也,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站喉脖,受9級特大地震影響椰苟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜动看,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一尊剔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菱皆,春花似錦须误、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至篷店,卻和暖如春祭椰,著一層夾襖步出監(jiān)牢的瞬間臭家,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工方淤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钉赁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓携茂,卻偏偏與公主長得像你踩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子讳苦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容