標籤:github 自動化 raw ssh 開源項目 .sh 開發 上傳 www
Travis CI 的使用
官網: http://travis-ci.org/
ps: 這個是公開的,如果需要使用私人的,請使用 .com 網域名稱。
需要提醒的是:每次提交代碼後都會重新下載需要的資源檔哦,所以時間很長,耐心等待吧。
TravisCI 有什麼用?
travis-ci 就是 自動化 CI 工具,類似於大公司經常使用的 Jenkins,但是 travis-ci 是在雲端的,而是支援 github, 還免費,我們可以 用 travis-ci 做很多的事情,不僅僅是 編譯看 項目有沒有問題。例如在項目構建結束以後,我們可以打包,並發布 apk 到都 蒲公英, fir,也可以用郵件通知給相關的開發人員和業務任務。 做一些簡單處理,輕輕鬆鬆。這部分內容到後面儘快整理,在寫一篇。
添加 github 項目到 travis-ci
- 進入 Travis 官網後,使用 GitHub 帳號 登入,成功後:
。
- 點擊 加號 ,能看到你 GitHub 裡面的所有:
, 如果沒有項目或者沒有你建立的項目,請點擊右上方的 Sync account 按鈕。
- 點擊這裡:
開啟 Travis 構建。點擊這個可以配置該項目:
- 預設是空的:
在 項目中添加 travis-ci 需要的 .travis.yml 檔案
- 在項目根目錄下直接建立 一個 .travis.yml 的檔案。
- 直接在檔案裡面添加代碼:
.travis.yml 檔案 原始碼
language: androidjdk: oraclejdk8sudo: falseandroid: components: - tools - build-tools-25.0.2 - android-25 - extra-android-m2repository - extra-android-support licenses: - android-sdk-license-.+ - ‘.+‘before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"script: - ./gradlew assembleRelease
因為該文很長很長,所以暫時就不解釋具體含義了,可以看看官方文檔。
push 項目到 github, travis-ci 自動監測構建
- 提交到代碼,並 push 到 github。會自動觸發 Travis 的自動構建。
- 下面黑色部分是構建的過程:
, 黑框上的白色點點點擊後會變成綠色,會自動滾動到最下面。
喝一杯咖啡,慢慢等待吧,最難熬的時候已經過去,此刻是享受的時候了。
回到首頁重新整理後,能看到:
說明我們已經構建成功了。
.travis.yml 需要注意的地方
初次使用 Travis 的試試,總遇到 說 android 的一些協議未接受而構建失敗,導致耗費了一兩天,曾經一度想放棄,但是最終堅持了下來,通過各種搜尋,摸索,猜測,終於搞定。其實最初的項目是這個:https://github.com/gdky005/TestJitpack ,裡面有很多辛酸史記錄,從提交記錄能看得出來,有興趣的可以研究研究,也許能解決你現在的問題。
Travis CI 協議問題解決方案:http://stackoverflow.com/questions/37615379/travis-ci-build-doesnt-work-with-android-constraint-layout
最重要部分在這裡:
machine: environment: ANDROID_HOME: /usr/local/android-sdk-linuxdependencies: pre: - mkdir -p "$ANDROID_HOME/licenses" - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
添加 travis-ci 徽章到 github
激動的時刻再次到來,讓我們找找徽章在哪裡呢?
讓我們來選擇 markdonw 格式:
並複製上。
同樣如上修改 readme.md。
加空格後,直接貼上去:
這裡需要說明的是,如果換成,表徵圖也會換行哦。這樣寫就能保證所有的表徵圖在一行了。
回到項目首頁以後就能發現:
添加 Travis 徽章成功。
By the way! 上面是最初級的構建過程,如果遇到單元測試就不行了,還得參考 我的開源項目 TestJitpack。 不過有點亂,後面整理下。
Circle CI 的使用
官網: https://circleci.com/
Circle CI 和 Travis CI 有什麼區別?需要一起使用嗎?
Circle CI 相對來說比 Travis CI 好一些,至少介面上來說哈。還提供 ssh 的串連,構建過程相對來說 比較透明直觀。例如:
Travis CI 的文檔資料相對 Circle CI 來說 比較多, Circle CI 資料少之又少。
Travis CI 的使用率還是很高的, 不過 Circle CI 相對來說比較 年輕化,符合主流的科技感,更智能。
說到是否需要一起使用,其實都行,不過我在觀察 github 主流項目的時候 有不少項目都是同時使用的,多一個技能總沒有壞處吧。其實會了 Travis CI,在加 Circle CI 真是簡單不少呢,只是基本文法不太一樣。
添加項目到 Circle CI
1.登入首頁面:
在 project 裡面自己的帳號下搜尋剛建立的項目。
2.一般直接選擇 Ubuntu 即可:
點擊綠色 Build project.
3.能看到:
但是這次肯定會失敗,因為我們還沒有添加 Circle 需要的檔案呢。
在項目中添加 Circle CI 需要的 circle.yml 檔案
- 在項目的根目錄下 添加 circle.yml 檔案;
- 添加 circle 的代碼到檔案中:
circle.yml 原始碼:
machine: java: version: oraclejdk8 environment: ANDROID_HOME: /usr/local/android-sdk-linuxdependencies: pre: - mkdir -p "$ANDROID_HOME/licenses" - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" override: - echo y | android update sdk --no-ui --filter "android-25" - echo y | android update sdk --no-ui --filter "build-tools-25.0.2" - echo y | android update sdk --no-ui --filter "extra-android-m2repository" - echo y | android update sdk --no-ui --filter "extra-android-support" - echo y | android update sdk --no-ui --filter "extra-google-m2repositor" - ./gradlew dependencies || truetest: override: - ./gradlew build
push 項目到 github, Circle CI 自動監測構建
1.提交代碼後,發布到 github,Circle CI 會自動執行。
2.
點擊進來後,會看到:
說明已經開始 構建了, 下載需要的東西:
。
3.構建中的一些步驟:
相對 Travis 來說展示更直觀。
4.看到
說明構建成功。
添加 Circle CI 徽章到 github
我們再來把 Circle CI 的徽章找到,並添加到我們的 github 上去吧。
我們把 徽章的 markdown 連結拷貝下來放入到我們的 主專案頁面的裡面。
回項目首頁重新整理後:
非常 happy, 已經添加成功了。
接下來添加什麼呢?
Github上許多開源項目都使用了Codecov來展示單元測試結果, 就它了。
Codecov 的使用
根據文中的指示:我們能看到一個開源的 github 項目 https://github.com/codecov/example-android, 不過看起來點暈暈的,於是摸索了一段時間。
我們之後都直接使用 Trivas CI 構建了。
添加項目就不說了,進入後,點擊 project changes, 找到自己的項目:
等生產報告後,進入該網站就能看見結果。
利用 Jacoco 產生報告
Codecov不支援自己產生Android的測試覆蓋率報告,它能做的是接收Jacoco產生的報告並進行可視化
1) 在 app 的 build.gradle 檔案中 添加依賴
//Jacoco 產生報告的依賴 androidTestCompile(‘com.android.support.test:runner:0.5‘, { exclude group: ‘com.android.support‘, module: ‘support-annotations‘ }) // Set this dependency to use JUnit 4 rules androidTestCompile(‘com.android.support.test:rules:0.5‘, { exclude group: ‘com.android.support‘, module: ‘support-annotations‘ }) // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource androidTestCompile(‘com.android.support.test.espresso:espresso-contrib:2.2.2‘, { exclude group: ‘com.android.support‘, module: ‘support-annotations‘ exclude group: ‘com.android.support‘, module: ‘support-v4‘ exclude group: ‘com.android.support‘, module: ‘appcompat-v7‘ exclude group: ‘com.android.support‘, module: ‘design‘ exclude group: ‘com.android.support‘, module: ‘recyclerview-v7‘ }) androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2‘, { exclude group: ‘com.android.support‘, module: ‘support-annotations‘ })
2) 在 需要構建測試覆蓋率報告的Module (AndroidBadge 項目中的 app) 的gradle檔案中設定。
debug{ testCoverageEnabled true}
3) 可以在嘗試在本地產生報告:
./gradlew :app:createDebugAndroidTestCoverageReport 產生測試報告。 app 就是咱們項目中要測試的 module
測試報告地址:app/build/reports/coverage/debug/index.html。
上報資料給 Codecov
- 使用Github帳號登入 https://codecov.io/, 並提供授權給該應用。
在.travis.yml檔案中添加命令將測試覆蓋率報告上傳給Codecov。
after_success:
- bash <(curl -s https://codecov.io/bash)
Codecov 需要用到 單元測試,所以必須要在 設定檔中添加模擬器
因為之前修改過很多次,過程很繁瑣,直接給設定檔了,相信大家一眼就能看出來。
完整的設定檔是:
language: androidjdk: oraclejdk8sudo: falseenv: global: - ANDROID_API_LEVEL=25 - ANDROID_BUILD_TOOLS_VERSION=25.0.2 - ANDROID_ABI=armeabi-v7a - ANDROID_TAG=google_apis - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default)android: components: - platform-tools - tools # to install Android SDK tools 25.1.x - build-tools-$ANDROID_BUILD_TOOLS_VERSION - android-$ANDROID_API_LEVEL - sys-img-armeabi-v7a-google_apis-$ANDROID_API_LEVEL licenses: - android-sdk-license-.+ - ‘.+‘before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"before_script: # Create and start emulator - echo no | android create avd --force -n test -t "android-"$ANDROID_API_LEVEL --abi $ANDROID_ABI --tag $ANDROID_TAG - emulator -avd test -no-skin -no-window & - android-wait-for-emulator - adb shell input keyevent 82 &script: - ./gradlew assembleRelease - ./gradlew :app:createDebugAndroidTestCoverageReport --info --stacktraceafter_success: - bash <(curl -s https://codecov.io/bash)
codecov 總結
Travis-CI 對 android 的單元測試支援不是很好,因為需要開啟虛擬機器,開啟這個過程就得10分鐘(我的測試時間),很耗費時間。有時候也串連不上,一次跑下來估計得個 20分鐘左右吧。所以,穩定性確實不是很高。如果不做單元測試,而只是做發布之類的,穩定性還是高的。
單元測試應都會吧, 這裡檢測的標準就是說 每個類和方法都必須檢測到,否則就算沒有覆蓋。我這裡也就簡單在項目中寫過例子,剩下的你們自己玩吧。
所以 要不要使用單元測試 還是根據項目決定吧。
擷取 codecov 的徽章
Api_Level 的使用
讓 codecov 慢慢構建吧,我們先繼續。
官網:https://android-arsenal.com/api
Api_Level 有什麼用?
Api_Level 是 arsenal 網站給各位開發人員的一個福利,我們的 android 開源項目一般都有一個最低的構建版本。平時我們都是在 md 檔案中寫上 支援版本是 14+等很多樣式,但是 不夠醒目,有了 Api_Level 後,開啟開源項目首頁就知道,最低版本是多少。 不用看文檔也能明白,輕鬆不少。 對應的 api 的一些特性和修改也能在這裡展現。
Api_Level 怎麼玩?
如果你的開源項目最低支援版本是:14,那麼就選擇這裡:
把這個拷貝下來,放入我們的 md 文檔中吧。
codacy 的使用
官網: https://www.codacy.com
codacy 是什嗎?
codacy 編程代碼自動審查服務平台,可以幫我們分析存在的問題 或者說是 bug,主要包括代碼品質、文法規範、功能可用性方面的檢查。
codacy 怎麼使用?
進入官網,添加自己的需要的 project。
完成後,等待一段時間就好了,會給你發郵件通知,已經完成。
完成後的效果是:
咱們的這個項目評級是 B。
codacy 徽章呢?
拷貝下來,手動放到 咱們的項目的 md 文檔中把。比較放心一些,如果點擊後面的 add badge ,會自動加到項目中,需要我們 pull request 裡面處理下。
產生個性徽章
官網: https://shields.io/
有什麼用?
彰顯個人魅力,體現某種功能。例如咱們做一個跳轉到我的部落格的 個人徽章。
怎麼玩?
滾動網頁到最下面:
在對應的地方填寫相應的東西(也支援中文哦), 完成後點擊後面的 Make Badge 按鈕試試看。
我想我的個人表徵圖是這種淺藍色:
那麼我就在 color 中直接寫:7AD6FD
點擊產生 一個地址, 先儲存下面。
這個原理是什麼呢? (回答最開始的問題)
徽章的格式即是 markdown 的格式:
[\](D)
A 表示的頁面中需要顯示的內容, B 表示的是圖片的地址,D 表示的是點擊後需要跳轉的連結的地址。
合成我的個人專屬表徵圖吧
圖片地址是上面存下來的。 前面顯示內容:作者。按照上面的規範出來的結果就是:
[\](http:\//www.gdky005.com)
把這段代碼 粘貼到 我們的 md 文檔中,個性專屬徽章就出來了,而且點擊後能到我們想去的地方。
很酷吧,其實還可以做很多這樣的事情。
本文的 中的 項目地址是: https://github.com/gdky005/AndroidBadge
需要逐步瞭解項目的過程或者 根據步驟出現問題的話,可以check 對應的節點,看看代碼是否不同,然後自行修改,我特意儲存了該進度。如果中 git提交的記錄:
相信小夥伴們肯定能做出更有意思的東西,到時候記得與我和大家分享,比較有特色的,我會將你們的連結掛載到 Github 項目裡面。
論一款炫酷 Android 開源項目的修鍊之路(下)