Android-解放雙手告別測試-使用Jenkins自動化打包

如果你并不急于放到服務(wù)器上,只是想玩玩這個東西沟突。你可以先下載好這兩個下文用到的包花颗。
下載Tomcat9.0.zip
下載Jenkins.war

先看一下最后效果圖:
Jenkins上和郵件中效果-


.png

.png

主要步驟可分為三個步驟

  • 環(huán)境配置
  • 安裝插件
  • 構(gòu)建項目
    作為移動端項目為了效益最大化,我們還需要使用
  • 自定義參數(shù)配置
  • 二維碼生成
  • 構(gòu)建成功發(fā)送郵件事扭,提供二維碼圖片

一 捎稚、Jenkins配置步驟

step.1 安裝

準備一個tomcat版本不要太低,6.0以上。
下載最新版的Jenkins-war包今野。下載地址https://jenkins.io葡公。
將war包放入tomcat下的wabapps目錄下,啟動tomcat条霜。
在地址欄輸入localhost:8080/jenkins催什。

step.2 安裝所需插件

按照下面的插件列表,搜索并勾選下載安裝宰睡。務(wù)必不要缺失蒲凶,造成后續(xù)配置缺少參數(shù)選項和部分功能缺失。
必要的插件列表:
1.Branch API Plugin
2.build timeout plugin
3.build-name-setter
4.Credentials Binding Plugin
5.description setter plugin
6.Dynamic Parameter Plug-in
7.Environment Injector Plugin

</p>
9.Git plugin
10.GIT server Plugin
11.Gradle Plugin
12.Git Parameter Plug-In
</p>
13.Pipeline: Basic Steps
14.Pipeline: Build Step
15.Pipeline: Input Step
16.Pipeline: Nodes and Processes
17.Pipeline: Stage Step
18.Scriptler
19.Workspace Cleanup Plugin
20.Post-Build Script Plug-in
21.Email Extension Plugin
22.SSH Slaves plugin
23.Timestamper
如果你使用的SVN 還需要安裝
Subversion Plug-in
Subversion Release Manager plugin

</p>插件比較多拆内,保證網(wǎng)絡(luò)狀態(tài)良好否則個別容易失敗旋圆,需要重新安裝。

step.3 Jenkins配置-重點
  • 3.1 環(huán)境配置:
    進入:系統(tǒng)管理→Global Tool Configuration
    找到 JDK麸恍、Gradle灵巧、Git 三個模塊。
  • JDK :
    別名=隨意抹沪。
    JAVA_HOME=即環(huán)境變量中JAVA_HOME中的內(nèi)容
  • Gradle:
    別名=隨意
    GRADLE_HOME= gradle的安裝目錄路徑xx/gradle\gradle-2.14.1

可以直接配置android studio 安裝目錄中的gradle


gradle1.png

如果你使用android studio 直接更新過gradle刻肄,他們在 系統(tǒng)盤\users\用戶名\.gradle\wrapper\dist目錄下。
gradle可以配置多個融欧,兼容不同編譯版本敏弃。

  • Git
    Name=別名
    Path to Git executable = git.exe文件的全路徑(d:\progran files\Git\bin\git.exe)

  • 3.2 全局屬性配置

sdk.png

** 需要和環(huán)境變量中的sdk路徑相同**

  • 3.3 打包配置
    新建→構(gòu)建一個自由風(fēng)格的軟件項目,進入到新建項目后噪馏,填寫名稱及說明麦到。
    • 找到→源碼管理,選擇對應(yīng)的代碼管理工具欠肾,我這里使用的是git
      填寫信息如圖
      git2.png

      使用git還需要添加認證隅要,即賬號登陸,點擊Add輸入git賬號信息
      git2.png
    • 選擇→構(gòu)建插件董济,我們準備的是gradle,所以選擇 Invoke Gradle script
      選擇配置的gradle的版本,在 taks 欄輸入 命令:clean assembleRelease --stacktrace --debug
      點擊保存要门!
  • 3.4 無屬性構(gòu)建
    點擊立即構(gòu)建虏肾,在 build history可看到任務(wù)執(zhí)行。
    任務(wù)前有個藍色小圓點欢搜,如果項目構(gòu)建失敗封豪,任務(wù)前的小圓點為紅色,構(gòu)建成功依然為藍色炒瘟。
    同時在Console Output中可查看構(gòu)建日志吹埠, 日志最后出現(xiàn)Finished: SUCCESS,即構(gòu)建成功。
    如果出現(xiàn) Finished:Failed構(gòu)建失敗缘琅,日志內(nèi)容比較多粘都,直接全局搜索error查看報錯信息。
    進入→工作空間中可看到和工程目錄一樣的結(jié)構(gòu)刷袍,找到apk包翩隧。

以上就完成了簡單的部署和構(gòu)建。但還不是我們的最終目的呻纹。如果你你只是為了給項目組提供Jenkins工具使用堆生,以上部署和測試就算ok了。
下面是移動端自己必須掌握的雷酪,Jenkins自定義參數(shù)配置淑仆,和二維碼生成。


step.4 自定義屬性配置

使用自定義屬性哥力,我們需要使用到gradle文件和properties文件
配置需要使用的自定義屬性
.properties文件

APP_VERSION = 1.0.1
IS_JENKINS = false
BUILD_TYPE = debug
PRODUCT_FLAVORS = xiaomi
ALIAS_PASSWORD = android
STORE_PASSWORD = android
BUILD_PATH_JENKINS = E\:\\JenkinsApk
BUILD_PATH_LOCAL = D:\\AS_PROJECT\\TestJenkins
BUILD_TIME= 1970-1-1
APPNAME = JKApp

.gradle文件

        apply plugin: 'com.android.application'

          def getDate() {
          def date = new Date()
          def formattedDate = date.format('yyyyMMddHHmm')
            return formattedDate
       }
        def verCode = 14
        android {
        //渠道Flavors
        productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE:    "wandoujia"]
        }
         }

        compileSdkVersion 23
         buildToolsVersion "25.0.0"
         signingConfigs {
        release {
            keyAlias 'androiddebugkey'
            keyPassword ALIAS_PASSWORD
            storeFile file('sinkkey.keystore')
            storePassword STORE_PASSWORD
            }
           }
            defaultConfig {
        applicationId "zsw.testjenkins"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode verCode
        versionName "1.0"
        versionName APP_VERSION
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
           }
          buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
          }

//修改生成的apk名字及輸出文件夾
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            //新名字
            def newName
            //時間戳
            def timeNow
            //輸出文件夾
            def outDirectory
            //是否為Jenkins打包蔗怠,輸出路徑不同
            if ("true".equals(IS_JENKINS)) {
                //BUILD_PATH為服務(wù)器輸出路徑
                timeNow = BUILD_TIME
                outDirectory = BUILD_PATH_JENKINS
                //JKApp-v1.0.1-xiaomi-release.apk
                newName = APPNAME+"-v"+APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
            } else {
                //本機打包輸出在本機路徑
                timeNow = getDate()
                outDirectory = BUILD_PATH_LOCAL
                newName = APPNAME+"-v"+APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
            }
            output.outputFile = new File(outDirectory+"/"+timeNow, newName)
        }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.0.0'
    testCompile 'junit:junit:4.12'
}

上面我們配置了、渠道包省骂、簽名文件蟀淮、版本號、apk命名钞澳、apk輸出文件夾仅颇,在.properties文件中需要 一 一 與之對應(yīng)哄酝。
下面我們進入到Jenkins對上述參數(shù)進行對應(yīng)配置。

找到 參數(shù)化構(gòu)建過程選項→打勾

params1.png

選擇→添加參數(shù)

  • 選項參數(shù)使用 Choice
  • 字符輸入?yún)?shù)使用 String Parameter
  • 時間參數(shù)使用 Dynamic Parameter
    在添加參數(shù)時,配置Name的值必須與.properties文件中定義的參數(shù)名稱相同宁仔。
    我們需要用到的僅這三個,具體輸入如下圖觅廓。
    Choice
Choice.png

Dynamic Parameter

圖片.png

String Parameter

String.png

將需要的參數(shù)按類別添加即可仙逻。

參數(shù)引用
找到上面我們使用Gradle 插件的 Invoke Gradle script
修改tasks命令,應(yīng)用上面的參數(shù)混蔼,并勾選Pass job parameters as Gradle properties選項履腋。如下圖。

tasks.png

PRODUCT_FLAVORSBUILD_TYPE即我們上面配置的參數(shù)惭嚣,務(wù)必保持一致遵湖。
點擊保存,回到項目首頁晚吞。
就可以看到延旧,原先的立即構(gòu)建已經(jīng)變成了Build with Parameter
點擊參數(shù)構(gòu)建,就可以看到如下上面我們配置的參數(shù)槽地。
等待構(gòu)建完成迁沫,前往在.Gradle文件中配置的路徑中即可找到我們配置的命名apk芦瘾。

另外提一點,更換名稱集畅。因為原命名只是構(gòu)建編號近弟,沒有識別度。相信你從無參構(gòu)建時就想更換了牡整。

圖片.png

進入項目配置找到→構(gòu)建環(huán)境→勾選Set build Name 設(shè)置參數(shù)

圖片.png

重新打包藐吮,如上圖我們使用了BUILD_NUMBER 自帶參數(shù),以及 APPNAME逃贝、APP_VERSION谣辞、BUILD_TYPE ,最后效果如下圖沐扳。

圖片.png

二泥从、生成二維碼

這里必須用到Python這個陌生的語言。第一次接觸python沪摄,雖只用到冰山一角躯嫉,但也體會到了他插件化集成的便捷性。

** step.1 準備工作**:

  • 為tomcat 配置文件下載路徑
    進入tomcat安裝目錄→conf→server.xml文件杨拐,在Host節(jié)點中添加如下配置祈餐。
      <Context  reloadable="true" docBase="E://JenkinsApk" crossContext="true"         path="/JenkinsApk"/>
  • 下載安裝Python和pip,依次配置環(huán)境變量。
    Python的安裝及pip插件工具的安裝哄陶,直接參照此博客即可:python 安裝步驟博客

  • 安裝圖片支持插件Pillow和二維碼生成庫qrcode
    Pillow 就是Python Imaging Library(PIL)的進化版帆阳。Pillow由于更新版本的問題,使用普通插件安裝命令可能會失敗屋吨。在安裝Pillow之前蜒谤,確保pip能正常使用,最好是先隨便找一個包安裝一下至扰。然后命令行輸入 pip list 檢查是否安裝成功鳍徽。

    安裝Pillow
    命令1:pip install Pillow (失敗)
    命令2:pip install -I --no-cache-dir -v Pillow (成功)
    至于為什么失敗敢课,解釋頗多也不想深究阶祭。暫且都記上多試試。
    安裝qrcode 命令:pip install myqr

    qrcode這個庫還是初略看一下比較好直秆,在README文件中有詳細的安裝使用說明胖翰。
    下載中途如果失敗, 重新輸入命令執(zhí)行即可切厘,網(wǎng)絡(luò)不穩(wěn)定容易出現(xiàn)超時,他沒有自動重連機制懊缺。
    安裝完成后疫稿,在Jenkins中配置Python全局變量培他。這樣我們才能使用Python的腳本命令,入下圖遗座。
    進入 →系統(tǒng)管理 →系統(tǒng)設(shè)置 找到 Enviroment variables

Paste_Image.png

step.2 生成二維碼

進入項目→構(gòu)建→增加構(gòu)建步驟舀凛,選擇Execute windows batch command,填寫qrcode生成二維碼的命令

Paste_Image.png

上述命令中使用到的$參數(shù),是通過動態(tài)拼接指定對于的apk文件途蒋。
生成一個jenkins_app.png的二維碼圖片猛遍,輸出路徑為 -d之后的路徑。
此時點擊保存号坡,再重新構(gòu)建一次懊烤,在配置目錄下應(yīng)該能找到生成的二維碼圖片了。

** step.3 展示二維碼**
找到構(gòu)建后操作 → 增加構(gòu)建后操作步驟→Set build description
使用html標簽引用我們的二維碼圖片和apk文件即可宽堆,當然這里我們依然需要動態(tài)拼接地址腌紧,來鎖定目標。

Paste_Image.png

完整代碼-

![](http://localhost:8080/JenkinsApk/${BUILD_TIME}/jenkins_app.png) <br>
 <a href='http://localhost:8080/JenkinsApk/${BUILD_TIME}/${APPNAME}-v${APP_VERSION}-${PRODUCT_FLAVORS}-${BUILD_TYPE}.apk'>?點擊下載-V${APP_VERSION}.apk</a>

OK!大功告成畜隶,保存再次打包壁肋。就能得到文章開頭我們貼圖的效果了。
**PS:對于二維碼和apk的存放路徑籽慢,需要預(yù)先定義好浸遗。為了清晰這里使用時間參數(shù)BUILD_TIME 作為文件夾區(qū)分,二維碼圖片則只需要用同一名稱箱亿。
所以apk下載地址:xx/download/2017-02-10-15-25/apk參數(shù)拼接名稱.apk
二維碼圖片地址:xx/download/2017-02-10-15-25/jenkins_app.png
**


三跛锌、發(fā)送通知郵件

Jenkins自帶了郵件通知功能,但是不太好用极景。跟著老司機的建議使用Email Extension Plugin來做察净。

step.1 配置
進入→系統(tǒng)管理→系統(tǒng)設(shè)置→郵件通知
填寫如下配置

Paste_Image.png

內(nèi)容填寫完成后,勾選通過發(fā)送測試郵件測試配置填寫接受郵箱進行測試盼樟,如果成功會收到一封如下的郵件氢卡。

Paste_Image.png

如果失敗,在下面會輸出紅色異常信息晨缴,根據(jù)異常修改配置再測試直到成功译秦。
這里直接使用了公司郵箱服務(wù)器,一次就通击碗。
之前使用smtp.qq.com測試一直失敗筑悴,SSL協(xié)議勾選,端口465稍途。如果有同學(xué)配置好了阁吝,希望能在下方評論或者私信我下。

**step.2 配置郵件內(nèi)容 **
找到 Extended E-mail Notification 高級械拍,填寫配置信息突勇。上面的測試通過装盯,只需要抄上來就好了。

Paste_Image.png

下面是郵件內(nèi)信息的拼接參數(shù)甲馋,我這里只是一個我喜歡的模板埂奈,個人喜好和項目組要求可隨意修改參數(shù)

Paste_Image.png

配置內(nèi)容搞定,下面進入項目中對郵件配置進行引用定躏。
step.3 添加郵件通知

進入→配置構(gòu)建后操作增加構(gòu)建后操作步驟Editable Email Notification账磺,填寫如下配置

  • 接收者
    我在頂部的自定義參數(shù)中設(shè)置 有 EMAIL參數(shù),所以這里引用即可痊远。你也可以直接在這里填寫郵件地址垮抗,一個或者多個。


    Paste_Image.png
  • 發(fā)送者和郵件內(nèi)容
    下面發(fā)送者為拗引,Jenkins 管理員郵箱
    Subject 和 Content 都是引用我們在系統(tǒng)設(shè)置中的配置內(nèi)容借宵。


    Paste_Image.png

保存重新構(gòu)建就大功告成了。
如果遇到問題歡迎下方評論區(qū)留言矾削,有留必回壤玫。( - - 我也是多虧了其他博主為我解惑)


此篇是在我部署發(fā)布完成后,回頭再寫的哼凯。遇到問題還不少欲间。
比如,代碼中g(shù)radle 中的版本 和Jenkins上選擇的Gradle版本如果不一樣有時會打包失敗断部。python 安裝 PIL失敗猎贴,使用qrcode庫時按照博主的命令無法執(zhí)行等。

也有其他方式蝴光,使用curl 命令行上傳到蒲公英(用curl 很久了她渴,但是上傳到蒲公英總是返回空數(shù)據(jù) 大寫尷尬),將返回信息打印到日志輸出蔑祟,使用正則匹配到二維碼圖片連接趁耗,但這種方式遠不如本文本地生成二維碼來的利索和便利,而且保證了每一個apk都有一個唯一的二維碼疆虚。


十分感謝以下博客的分享:
Android Jenkins+Git+Gradle持續(xù)集成-實在太詳細
利用Jenkins玩轉(zhuǎn)Android自動打包發(fā)包
windows下面安裝Python和pip終極教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苛败,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子径簿,更是在濱河造成了極大的恐慌罢屈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篇亭,死亡現(xiàn)場離奇詭異缠捌,居然都是意外死亡,警方通過查閱死者的電腦和手機译蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門鄙币,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肃叶,“玉大人,你說我怎么就攤上這事十嘿。” “怎么了岳锁?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵绩衷,是天一觀的道長。 經(jīng)常有香客問我激率,道長咳燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任乒躺,我火速辦了婚禮招盲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘉冒。我一直安慰自己曹货,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布讳推。 她就那樣靜靜地躺著顶籽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪银觅。 梳的紋絲不亂的頭發(fā)上礼饱,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音究驴,去河邊找鬼镊绪。 笑死,一個胖子當著我的面吹牛洒忧,可吹牛的內(nèi)容都是我干的蝴韭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跑慕,長吁一口氣:“原來是場噩夢啊……” “哼万皿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起核行,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牢硅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芝雪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體减余,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年惩系,在試婚紗的時候發(fā)現(xiàn)自己被綠了位岔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片如筛。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抒抬,靈堂內(nèi)的尸體忽然破棺而出杨刨,到底是詐尸還是另有隱情,我是刑警寧澤擦剑,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布妖胀,位于F島的核電站,受9級特大地震影響惠勒,放射性物質(zhì)發(fā)生泄漏赚抡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一纠屋、第九天 我趴在偏房一處隱蔽的房頂上張望涂臣。 院中可真熱鬧,春花似錦售担、人聲如沸赁遗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼和。三九已至,卻和暖如春骑素,著一層夾襖步出監(jiān)牢的瞬間炫乓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工献丑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留末捣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓创橄,卻偏偏與公主長得像箩做,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妥畏,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評論 25 707
  • 之前App在提交測試和最終部署的過程中App打包一直是由開發(fā)人員來完成的邦邦,由于項目比較大, 再加上Android打...
    南若水閱讀 6,148評論 1 16
  • 作為一名Android程序猿醉蚁,能偷懶時是一定要偷懶的燃辖。大家在開發(fā)中一定遇到過:測試說:幫我打個包吧,產(chǎn)品說:幫我打...
    小朱v閱讀 6,955評論 3 14
  • JenKins 是什么网棍? 理解:是一個集成各種插件黔龟,通過配置、管理 的本地Web,去自動化打包Android氏身、IO...
    JxMY閱讀 3,310評論 0 0
  • 你的生活巍棱,只有柴米油鹽人間煙火,別人的生活蛋欣,卻仿佛充滿風(fēng)花雪月詩和遠方航徙。 別人的生活,你總戀戀不忘別人的生活陷虎,你在...
    書卷卷閱讀 230評論 0 0