如果你并不急于放到服務(wù)器上,只是想玩玩這個東西沟突。你可以先下載好這兩個下文用到的包花颗。
下載Tomcat9.0.zip
下載Jenkins.war
先看一下最后效果圖:
Jenkins上和郵件中效果-
主要步驟可分為三個步驟
- 環(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
如果你使用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 全局屬性配置
** 需要和環(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
點擊保存要门!
- 找到→源碼管理,選擇對應(yīng)的代碼管理工具欠肾,我這里使用的是git
- 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)建過程選項→打勾
選擇→添加參數(shù)
- 選項參數(shù)使用 Choice
- 字符輸入?yún)?shù)使用 String Parameter
- 時間參數(shù)使用 Dynamic Parameter
在添加參數(shù)時,配置Name的值必須與.properties文件中定義的參數(shù)名稱相同宁仔。
我們需要用到的僅這三個,具體輸入如下圖觅廓。
Choice
Dynamic Parameter
String Parameter
將需要的參數(shù)按類別添加即可仙逻。
參數(shù)引用
找到上面我們使用Gradle 插件的 Invoke Gradle script
修改tasks命令,應(yīng)用上面的參數(shù)混蔼,并勾選Pass job parameters as Gradle properties選項履腋。如下圖。
PRODUCT_FLAVORS
和BUILD_TYPE
即我們上面配置的參數(shù)惭嚣,務(wù)必保持一致遵湖。點擊保存,回到項目首頁晚吞。
就可以看到延旧,原先的立即構(gòu)建已經(jīng)變成了Build with Parameter
點擊參數(shù)構(gòu)建,就可以看到如下上面我們配置的參數(shù)槽地。
等待構(gòu)建完成迁沫,前往在.Gradle文件中配置的路徑中即可找到我們配置的命名apk芦瘾。
另外提一點,更換名稱集畅。因為原命名只是構(gòu)建編號近弟,沒有識別度。相信你從無參構(gòu)建時就想更換了牡整。
進入項目配置找到→構(gòu)建環(huán)境→勾選Set build Name 設(shè)置參數(shù)
重新打包藐吮,如上圖我們使用了BUILD_NUMBER 自帶參數(shù),以及 APPNAME逃贝、APP_VERSION谣辞、BUILD_TYPE ,最后效果如下圖沐扳。
二泥从、生成二維碼
這里必須用到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 myqrqrcode這個庫還是初略看一下比較好直秆,在README文件中有詳細的安裝使用說明胖翰。
下載中途如果失敗, 重新輸入命令執(zhí)行即可切厘,網(wǎng)絡(luò)不穩(wěn)定容易出現(xiàn)超時,他沒有自動重連機制懊缺。
安裝完成后疫稿,在Jenkins中配置Python全局變量培他。這樣我們才能使用Python的腳本命令,入下圖遗座。
進入 →系統(tǒng)管理 →系統(tǒng)設(shè)置 找到 Enviroment variables
step.2 生成二維碼
進入項目→構(gòu)建→增加構(gòu)建步驟舀凛,選擇Execute windows batch command,填寫qrcode生成二維碼的命令
上述命令中使用到的$參數(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)拼接地址腌紧,來鎖定目標。
完整代碼-
![](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è)置→郵件通知
填寫如下配置
內(nèi)容填寫完成后,勾選通過發(fā)送測試郵件測試配置填寫接受郵箱進行測試盼樟,如果成功會收到一封如下的郵件氢卡。
如果失敗,在下面會輸出紅色異常信息晨缴,根據(jù)異常修改配置再測試直到成功译秦。
這里直接使用了公司郵箱服務(wù)器,一次就通击碗。
之前使用smtp.qq.com測試一直失敗筑悴,SSL協(xié)議勾選,端口465稍途。如果有同學(xué)配置好了阁吝,希望能在下方評論或者私信我下。
**step.2 配置郵件內(nèi)容 **
找到 Extended E-mail Notification →高級械拍,填寫配置信息突勇。上面的測試通過装盯,只需要抄上來就好了。
下面是郵件內(nèi)信息的拼接參數(shù)甲馋,我這里只是一個我喜歡的模板埂奈,個人喜好和項目組要求可隨意修改參數(shù)
配置內(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終極教程