1. 程式人生 > >配置專案構建完成後檔案移動---- Jenkins自動化部署學習筆記(三)

配置專案構建完成後檔案移動---- Jenkins自動化部署學習筆記(三)

  在前兩篇文章中,跟大家分享了在 Windows 系統上安裝 Jenkins 和使用 Jenkins 進行 Android 專案的編譯打包;相信可能會有人疑問,打包完成之後,我需要將 apk 檔案放入指定位置怎麼辦。

  其實,Jenkins 功能很強大,它可以配置在打包完成之後將你所需的檔案拷貝至目標路徑,亦可配置在打包完成後(成功/失敗),郵件通知相關人員。下面詳細介紹:

一、將打好的包移動至指定目錄

  1. 我在自己的電腦上安裝 Jenkins ,進行專案構建,並且想要將每次構建的包存入到E盤的AndroidApk目錄下:
    在上篇文章中,我們說到了,在配置構建任務時,有一個構建的選項,我們可以增加相應的操作來實現;
  • (1)、在構建選項區域下方,點選 增加構建步驟 ,選擇Execete Windows batch commond
    新增一個構建任務(務必在Invoke Gradle script 任務下方)
    image.png

  • (2)、在增加的 Windows 命令框中,需要配置相應的操作命令來實現移動的功能

其實移動的功能,我們可以看作是將原始檔複製到目標目錄,然後將原始檔刪除。
在打包時我們可以根據不同的環境配置不同的包,比如debug.apk ,release.apk;
我們也可以使用命令,將不同環境的包,移動至不同的目錄下:

複製檔案,我們需要原始檔目錄和目標檔案目錄:
此專案中:
原始檔目錄:D:\jenkinsSpace\example\app\build\outputs\apk\
目標檔案目錄:E:\AndroidApk
在AndroidApk下,我們再建立不同的資料夾,如:devApk 和 releaseApk
故,命令如下:

移動檔案命令

copy D:\jenkinsSpace\example\app\build\outputs\apk\*debug*.apk E:\AndroidApk\devApk
copy D:\jenkinsSpace\example\app\build\outputs\apk\*release*.apk E:\AndroidApk\releaseApk
rmdir /s /q D:\jenkinsSpace\example\

可以看到,這個總共有三條命令

第一條命令:是將原始檔目錄下的名稱包含 debug ,字尾名為 .apk 的檔案複製到 E:\AndroidApk\devApk 目錄下

第二條命令:是將原始檔目錄下的名稱包含 release ,字尾名為 .apk 的檔案複製到 E:\AndroidApk\releaseApk 目錄下

第三條命令:是將 Jenkins 構建該專案的工作空間進行清空(刪除工作空間目錄及子檔案)

  • (3)、配置好之後,我們點選儲存, 進行立即構建,構建結果如下:

構建結果

我們可以看到,在位置 1 處:專案構建成功,耗時 1分56秒

位置 2 處 :執行了複製名稱包含 debug ,字尾名為 .apk 的檔案的命令,成功

位置 3 處 :執行了複製名稱包含 release ,字尾名為 .apk 的檔案的命令,失敗

位置 4 處:執行了刪除工作空間的命令,成功

位置 5 處:退出執行命令,exit

位置 3 出執行失敗的原因是,我們再配置專案構建任務的時候,只是寫了 clean assembleDebug 這兩個命令,進行專案clean 和debug構建,我們將這個命令更改為clean build,就會構建所有配置的渠道包。

  1. 我們有時候需要將打好的apk 移動至共享資料夾,方便大家使用獲取安裝,這時候,我們只需要在執行復制命令前增加一行命令,將共享資料夾目錄對映到本地碟符:

命令如下:
net use [碟符] \[ip][共享資料夾] “[password]” /user:"[userName]"

% 將共享資料夾對映為碟符 Y:%
net use Y: \\192.168.22.156\tech  "!qaz2wsx3edc" /user:"tech"

在此命令下,我們更改上面的命令中的碟符為共享資料夾碟符,就可將apk移動至共享檔案夾了

copy D:\jenkinsSpace\example\app\build\outputs\apk\*debug*.apk Y:\AndroidApk\devApk
copy D:\jenkinsSpace\example\app\build\outputs\apk\*release*.apk Y:\AndroidApk\releaseApk
rmdir /s /q D:\jenkinsSpace\example\
  1. 我們也可以定義一個bat檔案,放在主機上,讓Jenkins任務去呼叫執行這個bat檔案,來複制/移動檔案
    bat檔案內容如下:
% 將共享資料夾對映為碟符 Y:%
net use Y: \\192.168.22.156\tech  "!qaz2wsx3edc" /user:"tech"

% 配置工作空間目錄變數%
set "spaceDir=D:\jenkinsSpace\example"

% 配置目標資料夾目錄變數%
set "targetDir=Y:\AndroidApk\jekinsBuildApks"

% 定義當前日期字串的變數如 20180505%
set "dateStr=%date:~0,4%%date:~5,2%%date:~8,2%"

% 定義Apk原始檔目錄%
set "resourceDir=%spaceDir%\app\build\outputs\apk"

% 根據日期分別定義在dev,test , release 下需要建立的資料夾目錄%
set "devPath=%targetDir%\dev\%dateStr%"
set "testPath=%targetDir%\test\%dateStr%"
set "releasePath=%targetDir%\release\%dateStr%"

% 建立資料夾%
md %devPath%
md %testPath%
md %releasePath%

% 複製apk到目標資料夾%
copy %resourceDir%\*dev*.apk %devPath%
copy %resourceDir%\*test*.apk %testPath%
copy %resourceDir%\*release*.apk %releasePath%

% 強制刪除工作空間目錄%
rd/s/q %spaceDir%\

該檔案中 %% 之間的內容為註釋內容
然後我們將該bat檔案命名為copyApp.bat ,放置在D:\bat\目錄下,
我們再Jenkins 任務中做如下配置

call D:\bat\copyApp.bat
exit 0

執行bat檔案

call D:\bat\copyApp.bat 是呼叫執行bat檔案,
exit 0 是用來處理上面出現的因windows 命令執行錯誤導致Build FAILURE,
Jenkins 任務根據cmd命令列返回是否為0來判斷是否Build 成功,故只要exit 0,每次返回0,無論windows 命令執行成功與否,只要專案Build 成功了,整個任務就是成功的。
至此專案移動至其他目錄完成!

上一篇:自動化構建Android專案 ---- Jenkins自動化部署學習筆記(二)
下一篇:配置專案構建完成後郵件通知---- Jenkins自動化部署學習筆記(四)