最新版Jenkins+Git加上Android3.0自動打包發包

Jenkins分爲兩種,一種是自帶服務也就是安裝版本(不須要tomcat服務器自帶servlet), 另外是提供war版本,我此次是使用的安裝版本,我我的建議的時仍是使用tomcat + war的方式(會少不少坑,可是也有不足首先全部的東西會在C盤生成.Jenkins文件夾,有一些強迫症的,喜歡目錄整潔,仍是選擇安裝板吧),下面給出三種下載地址:java

  1. 安裝好了以後,直接打開網頁輸入http://locahost:8080,首次運行會要求輸入管理員密碼,以下圖所示,圖片上會顯示密碼的放置地址,看到沒/Users/dmx/.jenkins/secrets/initialAdminPassword,這個地址就表明放置密碼的位置,打開文件拷貝出密碼輸入就行 python

    219825-519a8219e02114eb.png

  2. 接着會跳出下面的界面,通常咱們會選擇第一項推薦安裝,等安裝完成後進入到頁面 android

    219825-519a8219e02114eb.png

  3. 下面就是建立用戶頁面,這裏建議建立用戶,下面提供了Continue as admin按鈕也可進入主頁,可是後期想建立用戶仍是很麻煩的,因此建議建立用戶 建立好用戶,就能夠進入到主頁了~選擇系統管理->管理插件->可選插件來開始安裝咱們須要的插件
    Git plugin
    Gradle Plugin
    Email Extension Plugin

    description setter plugin
    build-name-setter
    user build vars plugin
    Post-Build Script Plug-in
    Branch API Plugin
    SSH plugin

    Scriptler
    Date Parameter Plug-in

    Git Parameter Plug-In
    必要的插件列表: 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
    9.GIT server Plugin
    10.Gradle Plugin
    11.Git Parameter Plug-In
    12.Pipeline: Basic Steps
    13.Pipeline: Build Step
    14.Pipeline: Input Step
    15.Pipeline: Nodes and Processes
    16.Pipeline: Stage Step
    17.Workspace Cleanup Plugin
    18.Post-Build Script Plug-in
    19.Email Extension Plugin
    20.SSH Slaves plugin
    21.Timestamper
    若是你使用的SVN 還須要安裝 Subversion Plug-in
    Subversion Release Manager plugingit

上面的這些插件你先所有安裝下來選擇的時候點直接安裝就好(安裝好後重啓服務輸入http://127.0.0.1:8080/restart),這裏面有些我是寫重複了,還有一些是已通過時了搜索不到了,這個能夠不用管,你把能裝的所有先安裝上去就行,注意插件比較多,保證網絡狀態良好不然個別容易失敗,須要從新安裝 4. Jenkins配置(這是重點) 進入:系統管理→系統設置 先設置3個變量的環境(這麼作是爲了在打包的時候遇到坑,血的教訓啊!相信我沒錯的) 選擇環境變量點擊增長如圖: github

1522812604(1).png
PYTHON是之後生成二維碼圖片用到的,還沒到那一步能夠先不用設置,ANDROID_HOME是SDK的路徑(不要忘記環境變量G:\android\android-sdk\platform-tools;G:\android\android-sdk\tools的添加) GRADLE_USER_HOME這個是幹嗎的呢,說來就是血淚史了,困惑了我很久,我打包時由於一個java aapt的異常一直打包失敗,這個異常跟aapt2不一樣,aapt2只須要在gradle.properties中加上android.enableAapt2=false就好,而這錯誤就是由於路徑問題致使到,再仔細查看錯誤日誌以後才發現路徑錯了,因此若是你使用的時安裝版記得加上這個路徑 環境配置: 找到 JDK、Gradle、Git 三個模塊最好把jdk和git加入電腦的環境變量。 JDK : 別名=隨意。 JAVA_HOME=即環境變量中JAVA_HOME中的內容

Git 別名=隨意 Path to Git = git.exe文件的全路徑(d:\Git\bin\git.exe) apache

1522813192(1).png

Gradle: 別名=隨意 GRADLE_HOME= gradle的安裝目錄路徑xx/gradle\gradle-2.14.1 windows

1522813220(1).png
能夠直接配置android studio 安裝目錄中的gradle 若是你使用android studio 直接更新過gradle,他們在 系統盤\users\用戶名.gradle\wrapper\dist目錄下。 gradle能夠配置多個,兼容不一樣編譯版本我配置了2個4.1和2.14.1 5.打包設置 新建→構建一個自由風格的軟件項目,進入到新建項目後,填寫名稱及說明。 找到→源碼管理,選擇對應的代碼管理工具,我這裏使用的是git 填寫信息:
使用git還須要添加認證,即帳號登錄,點擊Add輸入git帳號信息 接下來選擇→構建插件 咱們準備的是gradle,因此選擇 Invoke Gradle script 選擇配置的gradle的版本,在 taks 欄輸入 命令:clean assembleRelease --stacktrace --debug點擊保存 無屬性構建 點擊當即構建,在 build history可看到任務執行。 任務前有個藍色小圓點,若是項目構建失敗,任務前的小圓點爲紅色,構建成功依然爲藍色。 同時在Console Output中可查看構建日誌, 日誌最後出現Finished: SUCCESS,即構建成功。 若是出現 Finished:Failed構建失敗,日誌內容比較多,直接全局搜索error查看報錯信息。 進入→工做空間中可看到和工程目錄同樣的結構,找到apk包。 以上就完成了簡單的部署和構建 6. Jenkins自定義參數配置,和二維碼生成 自定義屬性配置 使用自定義屬性,咱們須要使用到gradle文件和properties文件 配置須要使用的自定義屬性 gradle.properties文件

android.enableAapt2=false
APP_VERSION = 1.0.0
IS_JENKINS = false
BUILD_TYPE = debug
PRODUCT_FLAVORS = xiaomi
ALIAS_PASSWORD = 123456
STORE_PASSWORD = 123456
BUILD_PATH_JENKINS = E:\\Jenkins\\workspace\\StarTeacher\\JenkinsApk
BUILD_PATH_LOCAL = E:\\AS_PROJECT\\TestJenkins
BUILD_TIME= ''
STORE_FILE=G:/android/zhangwork/StarTeacher/keystore/star.jks
APPNAME=starteacher
複製代碼

BUILD_PATH_JENKINS 這個設定的目錄我是創建在Jenkins安裝目錄的workspace裏面的項目裏面,這樣作是問了方便訪問的到路徑 app的.gradle文件tomcat

apply plugin: 'com.android.application'

def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}
def verCode = 1000000
android {
    compileSdkVersion 26
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    defaultConfig {
        applicationId "com.shinyread.starteacher"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode verCode
        versionName APP_VERSION
        multiDexEnabled true
        flavorDimensions "versionCode"
        // 打包排除如下文件,屏蔽因as自身bug,在沒有重複引用jar時,提示jar重複引用的問題
        packagingOptions {
            exclude 'META-INF/rxjava.properties'
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
        }
    }
    signingConfigs {
        signingConfig {
            keyAlias 'star'
            keyPassword ALIAS_PASSWORD
            storeFile file(STORE_FILE)
            storePassword STORE_PASSWORD
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.signingConfig
        }
        debug {
            signingConfig signingConfigs.signingConfig
        }
    }

    flavorDimensions "default"
    productFlavors {
        commonsoon {dimension "default"}
        xiaomi {dimension "default"}
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
    //修改生成的apk名字及輸出文件夾
    applicationVariants.all { variant ->
        variant.outputs.all {
            //新名字
            def newName
            //時間戳
            def timeNow
            //輸出文件夾
            def outDirectory
            //是否爲Jenkins打包,輸出路徑不一樣
            if ("true".equals(IS_JENKINS)) {
                //Jenkins打包輸出到服務器路徑
                timeNow = BUILD_TIME
                //BUILD_PATH爲服務器輸出路徑
                outDirectory = BUILD_PATH_JENKINS

                variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)

                //AutoBuildTest-v1.0.1-xiaomi-release.apk
                newName=APPNAME+'_'+APP_VERSION+"_${variant.productFlavors[0].name}_"+variant.buildType.name+'.apk'
            } else {
                //本機打包輸出在本機路徑
                timeNow = getDate()
                outDirectory = BUILD_PATH_LOCAL
                if ('debug'.equals(variant.buildType.name)) {
                    newName=APPNAME+"_${variant.productFlavors[0].name}_"+"${APP_VERSION}_debug.apk"
                } else {
                    variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)
                    //AutoBuildTest-v1.0.1-xiaomi-release.apk
                    newName=APPNAME+"_${variant.productFlavors[0].name}_"+APP_VERSION+'_'+variant.buildType.name+'.apk'
                }
            }
            outputFileName=newName
        }
    }

}
複製代碼

其中variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)是爲了自定義apk的輸出路徑這個跟舊版本的方法不同 下面咱們進入到Jenkins對上述參數進行對應配置。 找到 參數化構建過程選項→打勾 選擇→添加參數安全

  • 選項參數使用 Peristent Choice Paramete
  • 字符輸入參數使用 String Parameter
  • 時間參數使用 Date Parameter
  • 在添加參數時,配置Name的值必須與.properties文件中定義的參數名稱相同
    1522817621(1).png

1522817662(1).png
參數引用 找到上面咱們使用Gradle 插件的 Invoke Gradle script 修改tasks命令

clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
複製代碼

並勾選選項以下圖 bash

1522820745(1).png
最後進入項目配置找到→構建環境→勾選Set build Name 設置參數
1522820885(1).png
點擊應用保存,回到項目首頁 就能夠看到,原先的當即構建已經變成了Build with Parameter 點擊參數構建,就能夠看到以下上面咱們配置的參數。 等待構建完成,前往在.Gradle文件中配置的路徑中便可找到咱們配置的命名apk,同時也能夠看到咱們生成好的項目如圖
1522821061(1).png
7. 生成二維碼 這裏必須用到Python這個語言 下載安裝 Python 注意安裝時要選上pip這個選項打鉤 依次配置環境變量在path裏面配置E:\Python\Scripts;E:\Python;這兩項路徑填你本身的路徑 而後命令行輸入 pip list 檢查是否安裝成功

安裝圖片支持插件Pillow和二維碼生成庫**qrcode** 安裝Pillow命令:pip install -I --no-cache-dir -v Pillow 安裝qrcode 命令:pip install myqr 這時咱們要配置PYTHON的全局環境了,上面開始的時候我已經放了圖片,具體位置看上圖 生成二維碼 進入項目→構建→增長構建步驟,選擇Execute windows batch command, 填寫生成二維碼的命令以下

myqr http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/%BUILD_TIME%/%APPNAME%_%APP_VERSION%_%PRODUCT_FLAVORS%_%BUILD_TYPE%.apk -v 1 -l L -d E:/Jenkins/workspace/StarTeacher/JenkinsApk/%BUILD_TIME%
複製代碼

若是你是tomcat呢要怎麼作? 進入tomcat安裝目錄conf找到server.xml文件,在Host節點中添加以下配置

<Context  reloadable="true" docBase="E://JenkinsApk" crossContext="true"         path="/JenkinsApk"/>
複製代碼

重啓確保你能訪問http://localhost:8080/JenkinsApk,最後只須要在二維碼的命令中替換地址就好 展現二維碼 找到構建後操做 → 增長構建後操做步驟→Set build description以下圖

image.png
完整寫法

<img src='http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/${BUILD_TIME}/qrcode.png' width=200px height=200px > <br> <a href='http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/${BUILD_TIME}/${APPNAME}_${APP_VERSION}_${PRODUCT_FLAVORS}_${BUILD_TYPE}.apk'>點擊下載-V${APP_VERSION}.apk</a>
複製代碼

OK大功告成看看最後的效果吧!驚喜不驚喜啊記得在全局安全配置裏面把Markup Formatter的設置更改成Safe HTML,否則是不支持HTML顯示的

1522823585.png
相關文章
相關標籤/搜索