Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持續集成,自動構建

先介紹一下爲什麼要用這麼一大堆東西。。。。

  • 階段一 開發了一個簡單的app
    • 每次打包只需要./gradlew assembleRelease,然後等待幾分鐘,就可以得到一個安裝包。
    • 使用360加固助手進行加固
    • 然後將安裝包上傳到fir.im
    • 然後通知測試安裝測試
  • 階段二 爲了更好的用戶體驗,使用了熱修復tinker
    • ./gradlew assembleRelease打包
    • 生成的安裝包上傳到360官網進行加固,然後下載加固後未簽名的jg.apk
    • 對jg.apk進行對齊,得到zip.apk
    • 對zip.apk進行簽名
    • 檢查是否採用了V2簽名
    • 使用walle進行多渠道分包
    • 上傳到fir.im
    • 通知測試人員
  • 階段三

通過上面的對比,階段一需要4步完成一次打包測試流程,階段二則需要12步來完成一次打包測試流程,階段二都是用各種命令來完成,一方面比較繁瑣,另一方面也容易出錯,還有可能的階段三、階段四。。

說了一堆廢話,但是我們都能感覺到好麻煩,爲什麼打個包這麼繁瑣。。。有沒有什麼方法能夠更優雅一些?

有,答案就在Jenkins

接下來就讓我們用Jenkins將繁瑣的流程統統解決掉

關於Tinker,Walle,360加固的可以查看下面兩個鏈接:

Tinker使用過程及注意點(1)-環境搭建及簡單使用
Tinker使用過程及注意點(2)-360加固及多渠道分包

Jenkins環境搭建

  • Apache Tomcat
    • 訪問Tomcat,然後通過Download下載
      這裏寫圖片描述
    • 將下載的包解壓到~/Library/目錄下,然後命名爲Tomcat
    • 啓動Tomcat 打開終端,切換到Tomcat/bin目錄下,然後輸入:./startup.sh 回車,就可以啓動我們的Tomcat了
    • 打開瀏覽器輸入http://localhost:8080/,如果出現一隻貓,則證明配置成功
      這裏寫圖片描述
    • 關閉Tomcat,在bin目錄下,輸入:./shutdown.sh 回車,即可關閉Tomcat
    • 參考
  • Jenkins
    • Jenkins官網,點擊Download選擇自己的環境下載
    • 將下載的Jenkins.war包直接放到tomcat下的webapps目錄
    • 啓動tomcat
    • 然後打開http://localhost:8080/jenkins
    • 然後就是一系列的安裝過程,默認即可。。。加載的一些插件可以根據自己的需要選擇,或者選擇推薦的插件安裝
    • 可能遇到的問題:打開http://localhost:8080/jenkins報404錯誤,可能tomcat沒啓動,或者下載的Jenkins.war是壞的,重新下載即可

創建Jenkins項目

  • 填寫項目名稱,選擇構建一個自由風格的軟件項目,點擊ok
    這裏寫圖片描述

  • General
    填寫一下項目的描述信息即可
    這裏寫圖片描述

  • 源碼管理

    • 如果是Git上的項目,勾選Git,然後在Repository URL填寫項目的git url
    • 如果是公共倉庫則不需要進行其它操作,如果是私有倉庫,需要點擊Add添加帳號密碼,並將node替換成添加的帳號密碼
      這裏寫圖片描述
      這裏寫圖片描述
  • 構建器觸發
    這裏寫圖片描述
    上面H/15 * * * * 表示每15分鐘檢查一次
    定時檢查的配置,JenKins給出的註釋:

Examples:

# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December
H H 1,15 1-11 *
  • 構建環境
    這裏寫圖片描述

  • 構建

    • 點擊增加構建步驟,選擇Invoke Gradle script
      這裏寫圖片描述
    • 勾選Use Gradle Wrapper,選擇Make gradle executable
      這裏寫圖片描述

以上步驟就可以實現Jenkins的自動構建了。

接下來我們還可以設置以下功能

構建成功後自動上傳到fir.im

  • fir.im Jenkins 插件使用方法
    • 下載fir.im插件
    • 安裝插件參考:fir.im Jenkins 插件使用方法
      • 進入 Jenkins 管理界面後,點擊左側進入 系統管理
      • 然後找到 管理插件 並點擊進入
      • 進入插件管理後,點擊 高級 選項卡
      • 然後在頁面找到 上傳插件,選擇已下載好的 fir.im jenkins 插件文件路徑,並點擊 上傳 等待安裝成功。
      • 安裝成功後,如果沒有創建 Jenkins 項目,請先創建項目。如果需要配置已存在的項目,請進入在 配置 中找到 增加構建後操作步驟 ,並選擇 Upload to fir.im 添加到 Jenkins 項目中。
      • 添加成功後開始配置各種參數,如圖顯示:
        這裏寫圖片描述
    • 配置插件
      • fir.im Token(必填)
        這裏寫圖片描述
        這裏寫圖片描述
        這裏寫圖片描述
        保存,然後構建後將會自動上傳到fir.im

構建成功後給測試人員發郵件

  • 全局配置
    • 系統管理 -> 系統設置
      • JenKins Location 中填寫 JenkinsUrl和管理員郵件地址
        這裏寫圖片描述
      • Extended E-mail Notification
        這裏寫圖片描述
        這裏寫圖片描述
        關於step4的密碼解釋:qq郵箱-> 設置 -> 賬戶
        這裏寫圖片描述
      • 郵件模版:
Default Subject 
安卓構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

Default Content 
<hr/>

(本郵件是程序自動下發的,請勿回覆!)<br/><hr/>

項目名稱:$PROJECT_NAME<br/><hr/>

構建編號:$BUILD_NUMBER<br/><hr/>

GIT COMMIT:${GIT_COMMIT}<br/><hr/>

GIT URL:${GIT_URL}<br/><hr/>

GIT BRANCH:${GIT_BRANCH}<br/><hr/>

構建狀態:$BUILD_STATUS<br/><hr/>

觸發原因:${CAUSE}<br/><hr/>

構建日誌地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>


      • 郵件通知
        這裏寫圖片描述

全部設置完成後點擊保存,完成全局的配置

  • 接下來進行項目配置 回到項目 test -> 配置
    • 增加構建後操作步驟 -> Editable Email Notification
      這裏寫圖片描述
    • 都是一些默認設置
      這裏寫圖片描述
      這裏面的內容都是我們在全局中定義好的,如果不做更改,默認的郵件格式就是我們定義好的。
    • 點擊Advanced Settings
      這裏寫圖片描述
    • 點擊高級
      這裏寫圖片描述
      然後保存,郵件的發送就配置好了。

Tinker+Walle+360加固的腳本實現

接下來就解決gradle中,如何解放雙手,實現360加固和Walle多渠道分包的腳本實現

360加固

1.首先需要下載360的加固寶
2.然後將下載的文件解壓
這裏寫圖片描述
3.然後將解壓的文件中的jiagu文件夾放到項目根目錄
這裏寫圖片描述
4.在jiagu文件夾中新建jiagu_360.sh文件
首先在jiagu_360.sh文件中定義一些用到的路徑、帳號密碼等。
這裏寫圖片描述
然後寫加固代碼

echo "------ jiagu running! ------"

java -jar ${BASE} -version
java -jar ${BASE} -login ${NAME} ${PASSWORD}
#java -jar ${BASE} -importsign ${KEY_PATH} ${KEY_PASSWORD} ${ALIAS} ${ALIAS_PASSWORD}
#java -jar ${BASE} -showsign
#java -jar ${BASE} -importmulpkg ${CHANNEL} #根據自身情況使用
#java -jar ${BASE} -showmulpkg
#java -jar ${BASE} -showconfig
java -jar ${BASE} -jiagu ${APK} ${DEST} #-autosign

echo "------ jiagu finished! ------"

5.app的build.gradle中添加如下代碼

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.assemble.doLast {
            if (variant.buildType.name.contains('release')) {
                def apkPath = variant.outputs.get(0).outputFile as File
                exec {
                    ignoreExitValue true
                    commandLine "sh", "../../jiagu/jiagu_360.sh", apkPath, apkPath.getParent()
                }
            }
        }
    }
}

這樣360加固就自動搞定了,你只需要.gradlew assembleRelease就會自動幫你打包並且加固。

接下來就是對加固的應用進行簽名,多渠道什麼的了。

對齊、簽名

在加固的基礎上,在sh文件中繼續添加如下代碼:

echo "------ output file start------"
for file_a in ${DEST}/*; do
    temp_file=`basename $file_a`
    if [[ $temp_file == *"jiagu"*.apk ]];then
        JIAGU_PATH=${DEST}$temp_file
        echo "find it "${JIAGU_PATH}
        echo $temp_file
        break
    fi
    echo $temp_file
done
echo "------ output file finish ------"


echo "------ zipalign running! ------"
${SDK_PATH}/zipalign -v 4 ${JIAGU_PATH} ${ZIP_PATH}
echo "------ zipalign finished! ------"

echo "------ signer running! ------"
${SDK_PATH}/apksigner sign --ks ${KEY_PATH} ${ZIP_PATH} <<EOF
${KEY_PASSWORD}
EOF
echo "------ signer finished! ------"

Walle多渠道分包

1.首先我們需要兩個jar包
關於jar包的獲取,可以參考:
Tinker使用過程及注意點(2)-360加固及多渠道分包

2.在jiagu文件夾下新建walle文件夾,然後加入
CheckAndroidV2Signature.jar
walle-cli-all.jar
channel.txt
這裏寫圖片描述

3.在sh文件中添加如下代碼:

echo "------ check android v2 signature start ------"
java -jar ${WALLE_PATH}/CheckAndroidV2Signature.jar ${ZIP_PATH}
echo "------ check android v2 signature finish ------"

echo "------ walle channel start ------"
java -jar ${WALLE_PATH}/walle-cli-all.jar batch -f ${WALLE_PATH}/channel.txt ${ZIP_PATH} ${DEST}
echo "------ walle channel finished ------"

如果你或者測試需要一個包?

只需要點一下立即構建,將自動完成
打包,
加固,
多分包,
上傳fir.im,
通知相關人員。

這裏寫圖片描述

可能的坑?

1.點擊立即構建,可能某一次運行成功了,然後就一直失敗。。。
解決辦法:
構建 -> Invoke Gradle script -> Use Gradle Wrapper -> 高級
這裏寫圖片描述
不知道爲什麼jenkins會莫名其秒的在Build File添加一個路徑,導致報錯,所以刪除它,就沒問題了。

2.Jenkins自動構建過程中,360加固報錯,說文件損壞。
原因:未知。。。
解決辦法:找到Jenkins的項目地址:一般在/Users/.Jenkins/workspace
然後將jiagu文件夾從本地拷貝過去,刪除workspace目錄下原有的jiagu文件夾。即可正常加固。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章