JenKins 是什么伪朽?
理解:是一個集成各種插件,通過配置汛蝙、管理 的本地Web烈涮,去自動化打包Android朴肺、IOS的工具。
整體流程
插件配置——————》系統(tǒng)設(shè)置 sdk HOME 和路徑 ?坚洽,全局設(shè)置JDK戈稿、GRADLE 、GIT 的本地路徑 交由JenKins 管理(即Jenkins通過上步安裝的插件 配置好 就可以管理本地的gradle了)新建一個任務(wù)————》動態(tài)構(gòu)造自定義本地參數(shù)寫入build讶舰。gradle ——————》配置git 或svn 路徑(下載源碼到j(luò)enkins 好接管編譯)——————————》配置gradle 及task (編譯命令和編譯寫入構(gòu)造好的參數(shù))——》設(shè)置編譯的版本名稱————》構(gòu)建項目 ——————控制臺看log ?——————》自定義的輸出apk路徑 找到打出的apk包
環(huán)境變量配置:其實就是將本地計算機(jī)的配置 在JenKins上面配置一遍鞍盗,Jenkins 通過插件就可以自己去管理了。原本studio 通過gradle 編譯的android 項目在jenkins上處理了跳昼。
注:下面截圖上傳失敗 只能語言表達(dá)了般甲。
step.1
JDK
JDK 7.0+
Gradle
Gradle 中文網(wǎng) 安裝板或解壓版 對應(yīng)目錄下的 gradle.xxx.zip 包
apache 的官網(wǎng) http://tomcat.apache.org/
Jenkins的官網(wǎng)下載https://jenkins.io
step.2
將Jenkins.war放到 其解壓后的webapps的目錄下
step.3
解壓后的tomcat的bin目錄下 點擊startup.bat 啟動tomcat (shutdown.bat 停止tomcat)
step.4
打開本地瀏覽器
http://localhost:8080/jenkins/
然后注冊用戶名密碼。
這時候會出現(xiàn) ?一個文件夾路徑 ?拷貝到C盤 打開此文件夾 鹅颊,會出現(xiàn)數(shù)字密碼敷存。將其復(fù)制到 下面密碼框即可。
step.5 插件配置
進(jìn)入系統(tǒng)管理--》插件管理界面
可選插件 安裝如下插件,這些插件之后會用到堪伍。 點擊下載后在安裝锚烦。下載成功后。關(guān)閉tomcat 在打開帝雇。在訪問genkins 同上面step3 和step4. 在次進(jìn)入 已安裝即可查看到挽牢。
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
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
使用git安裝如下
9.Git plugin
10.GIT server Plugin
11.Gradle Plugin
12.Git Parameter Plug-In
如果你使用的SVN 還需要安裝
Subversion Plug-in
Subversion Release Manager plugin
step.6 設(shè)置全局屬性
系統(tǒng)管理--》進(jìn)入設(shè)置全局屬性
點擊environment variables 選項 配置 SDK
ANDROID_HOME
xx\sdk ? ? -----SDK 具體路徑 (studio 引用的sdk絕對路徑)
step.7 設(shè)置重點屬性(理解就是在本地的名稱 和其絕對路徑)
系統(tǒng)管理--》進(jìn)入Global Tool Configuration
JDK ?、gradle摊求、git 環(huán)境變量配置
JDK 模塊:
name:jdk_1.8
home :復(fù)制jdk 在本地文件夾的絕對路徑 xxx/jdk_1.8
gradle模塊:
注:引用 android studio 安裝板或解壓版 對應(yīng)目錄下的 gradle 即可
name:gradle-2.14.1
home:復(fù)制jdk 在本地文件夾的絕對路徑 xxx/gradle/gradle-2.14.1
git模塊也一樣 ?使用svn 此模塊就默認(rèn)就好禽拔。
step.8 新建任務(wù)
點擊新建任務(wù)
輸入名稱
Jenkins-》新建-》構(gòu)建一個自由風(fēng)格的軟件項目-》
點擊ok即可
step.9 配置項目
1. 自定義動態(tài)參數(shù)配置
這邊對應(yīng)設(shè)置gradle.properties文件 ,給build.gradle動態(tài)賦值 管理
找到參數(shù)化構(gòu)建過程選項→打勾
選項參數(shù)使用 Choice ?理解為下拉框多選
字符輸入?yún)?shù)使用 String Parameter 理解為一個字符串參數(shù)
時間參數(shù)使用 Dynamic Parameter 理解為一個計算的js腳本
在添加參數(shù)時室叉,配置Name的值必須與.properties文件中定義的參數(shù)名稱相同睹栖。
2. SVN 同步源碼配置
源碼管理:選擇具體的版本控制軟件,并填寫項目URL茧痕,如本人為svn野来,只需在Repository URL填具體項目svn地址,其它為默認(rèn)踪旷。
會自動將svn代碼下到j(luò)enkins 的workspace 目錄下
C:\Users\...\.jenkins\workspace
3. 設(shè)置項目名
進(jìn)入項目配置找到→構(gòu)建環(huán)境→勾選Set build Name 設(shè)置參數(shù)
注意和上面配置參數(shù)名一致如我們使用了BUILD_NUMBER 自帶參數(shù)曼氛,以及 APPNAME、APP_VERSION令野、BUILD_TYPE
${BUILD_NUMBER}${APP_VERSION}
4. gradle 配置
注意和上面配置參數(shù)一致
這邊對應(yīng)設(shè)置gradle.properties文件 舀患,給build.gradle動態(tài)賦值 管理
找到上面我們使用Gradle 插件的 Invoke Gradle script
修改tasks命令,應(yīng)用上面的參數(shù)气破,并勾選Pass job parameters as Gradle properties選項聊浅。
選擇 gradle 上面配置的名稱
task:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}
pass job parameters as gradle propertiers ?checbox 打鉤
PRODUCT_FLAVORS和BUILD_TYPE即我們上面配置的參數(shù),務(wù)必保持一致。
點擊保存低匙,回到項目首頁旷痕。
就可以看到,原先的立即構(gòu)建已經(jīng)變成了Build with Parameter
點擊參數(shù)構(gòu)建顽冶,就可以看到如下上面我們配置的參數(shù)欺抗。
等待構(gòu)建完成,前往在.Gradle文件中配置的路徑中即可找到我們配置的命名apk强重。
step.10 構(gòu)建項目
立即構(gòu)建----》Build with Parameter
step.11 控制臺查看log
step.12 APK編譯到指定路徑
step.13 source 對應(yīng)
gradle..properties文件
APP_VERSION=2.4.0
APP_VERSION_CODE=2
IS_JENKINS=false
BUILD_TYPE=debug
PRODUCT_FLAVORS=internal
BUILD_PATH_JENKINS=E\:\\AA
BUILD_PATH_LOCAL=D:\\BB\\CC
BUILD_TIME=1970-1-1
APPNAME=JKApp
build.gradle 文件
productFlavors {
// Because Android Meta-data does not support getLong method, NOTIFICATION_PROJECT_NUMBER
// is prefixed with 'L'('L' will be trimed when be used.
internal {
manifestPlaceholders = [BASE_URL: "http://",
HOST: "133.",
PORT: "",
HTTP: "http://",
API_VERSION: "api2",
CONTENT_REFERER_HTML: "http:"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_internal_api2"
}else{
versionName = "F" + getDate()+"_internal_api2"
}
}
open {
manifestPlaceholders = [BASE_URL: "https:/",
HOST: "pf",
PORT: "",
HTTP: "https://",
API_VERSION: "api",
CONTENT_REFERER_HTML: "https:"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_public"
}else{
versionName = "F" + getDate()+"_public"
}
}
myTest {
manifestPlaceholders = [BASE_URL: "http:",
HOST: "192.7",
PORT: "8383",
HTTP: "http://",
API_VERSION: "api2",
CONTENT_REFERER_HTML: "http:/"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_test"
}else{
versionName = "F" + getDate()+"_test"
}
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
//? ? ? ? ? ? ? ? ? ? buildOutputDir,
"${variant.versionName}.apk")
}
}
AndroidManifest.xml ?文件
android:value="${BASE_URL}"/>
android:value="${HOST}"/>
android:value="${PORT}"/>
android:value="${HTTP}"/>
android:value="${API_VERSION}"/>
Application 文件
@Override
public void onCreate() {
super.onCreate();
instance = this;
readMetaDataFromApplication();
}
private voidreadMetaDataFromApplication() {
try{
ApplicationInfo appInfo =this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String BASE_URL = appInfo.metaData.getString("BASE_URL");
String HOST = appInfo.metaData.getString("HOST");
String PORT = appInfo.metaData.getString("PORT");
String HTTP = appInfo.metaData.getString("HTTP");
String API_VERSION = appInfo.metaData.getString("API_VERSION");
String CONTENT_REFERER_HTML = appInfo.metaData.getString("CONTENT_REFERER_HTML");
Constants.BASE_URL= BASE_URL;
Constants.HOST= HOST;
Constants.PORT= PORT;
Constants.HTTP= HTTP;
Constants.API_VERSION= API_VERSION;
Constants.CONTENT_REFERER_HTML= CONTENT_REFERER_HTML;
}catch(PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
本文源碼鏈接下載:
http://download.csdn.net/detail/jxmy_1989/9756479
GIT 及證書簽名請 參考以下鏈接:
http://www.reibang.com/p/915c1ae69144
http://www.open-open.com/lib/view/open1482371829772.html