qweewq123qwe 发表于 2018-1-9 18:23:36

Android

  如果你并不急于放到服务器上,只是想玩玩这个东西。你可以先下载好这两个下文用到的包。
  下载Tomcat9.0.zip
  下载Jenkins.war

  先看一下最后效果图:
  Jenkins上和邮件中效果-


  .png
  主要步骤可分为三个步骤


[*]  环境配置

[*]  安装插件

[*]  构建项目
  作为移动端项目为了效益最大化,我们还需要使用

[*]  自定义参数配置

[*]  二维码生成

[*]  构建成功发送邮件,提供二维码图片

一 、Jenkins配置步骤

step.1 安装
  准备一个tomcat版本不要太低,6.0以上。
  下载最新版的Jenkins-war包。下载地址https://jenkins.io。
  将war包放入tomcat下的wabapps目录下,启动tomcat。
  在地址栏输入localhost:8080/jenkins。

step.2 安装所需插件
  按照下面的插件列表,搜索并勾选下载安装。务必不要缺失,造成后续配置缺少参数选项和部分功能缺失。
  必要的插件列表:
  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 plugin
  10.GIT server Plugin
  11.Gradle Plugin
  12.Git Parameter Plug-In
  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>
step.3 Jenkins配置-重点


[*]  3.1 环境配置:
  进入:系统管理→Global Tool Configuration
  找到 JDK、Gradle、Git 三个模块。
  可以直接配置android studio 安装目录中的gradle

  gradle1.png
  如果你使用android studio 直接更新过gradle,他们在 系统盘\users\用户名\.gradle\wrapper\dist目录下。
  gradle可以配置多个,兼容不同编译版本。


[*]  Git
  Name=别名
  Path to Git executable    = git.exe文件的全路径(d:\progran files\Git\bin\git.exe)

[*]  JDK :
  别名=随意。
  JAVA_HOME=即环境变量中JAVA_HOME中的内容

[*]  Gradle:
  别名=随意
  GRADLE_HOME= gradle的安装目录路径xx/gradle\gradle-2.14.1




[*]  3.2 全局属性配置


  sdk.png
  需要和环境变量中的sdk路径相同


[*]  3.3 打包配置
  新建→构建一个自由风格的软件项目,进入到新建项目后,填写名称及说明。


[*]  找到→源码管理,选择对应的代码管理工具,我这里使用的是git
  填写信息如图

  git2.png
  使用git还需要添加认证,即账号登陆,点击Add输入git账号信息

  git2.png

[*]  选择→构建插件,我们准备的是gradle,所以选择 Invoke Gradle script
  选择配置的gradle的版本,在 taks 栏输入 命令:clean assembleRelease --stacktrace --debug
  点击保存!


[*]  3.4 无属性构建
  点击立即构建,在 build history可看到任务执行。
  任务前有个蓝色小圆点,如果项目构建失败,任务前的小圆点为红色,构建成功依然为蓝色。
  同时在Console Output中可查看构建日志, 日志最后出现Finished: SUCCESS,即构建成功。
  如果出现 Finished:Failed构建失败,日志内容比较多,直接全局搜索error查看报错信息。
  进入→工作空间中可看到和工程目录一样的结构,找到apk包。

  以上就完成了简单的部署和构建。但还不是我们的最终目的。如果你你只是为了给项目组提供Jenkins工具使用,以上部署和测试就算ok了。
  下面是移动端自己必须掌握的,Jenkins自定义参数配置,和二维码生成。

step.4 自定义属性配置
  使用自定义属性,我们需要使用到gradle文件和properties文件
  配置需要使用的自定义属性
  .properties文件
  

APP_VERSION = 1.0.1IS_JENKINS = falseBUILD_TYPE = debugPRODUCT_FLAVORS = xiaomiALIAS_PASSWORD = androidSTORE_PASSWORD = androidBUILD_PATH_JENKINS = E\:\\JenkinsApkBUILD_PATH_LOCAL = D:\\AS_PROJECT\\TestJenkinsBUILD_TIME= 1970-1-1APPNAME = 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 =
  
       }
  
       wandoujia {
  
         manifestPlaceholders =
  
       }
  
      }
  

  
       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为服务器输出路径
  
               timeNow = BUILD_TIME
  
               outDirectory = BUILD_PATH_JENKINS                //JKApp-v1.0.1-xiaomi-release.apk
  
               newName = APPNAME+"-v"+APP_VERSION + '-' + variant.productFlavors.name + '-' + variant.buildType.name + '.apk'
  
         } else {                //本机打包输出在本机路径
  
               timeNow = getDate()
  
               outDirectory = BUILD_PATH_LOCAL
  
               newName = APPNAME+"-v"+APP_VERSION + '-' + variant.productFlavors.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文件中需要 一 一 与之对应。
  下面我们进入到Jenkins对上述参数进行对应配置。
  找到 参数化构建过程选项→打勾

  params1.png
  选择→添加参数


[*]  选项参数使用 Choice

[*]  字符输入参数使用 String Parameter

[*]  时间参数使用 Dynamic Parameter
  在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同。
  我们需要用到的仅这三个,具体输入如下图。
  Choice


  Choice.png
  Dynamic Parameter

  图片.png
  String Parameter

  String.png
  将需要的参数按类别添加即可。
  参数引用
  找到上面我们使用Gradle 插件的 Invoke Gradle script
  修改tasks命令,应用上面的参数,并勾选Pass job parameters as Gradle properties选项。如下图。

  tasks.png
  PRODUCT_FLAVORS和BUILD_TYPE即我们上面配置的参数,务必保持一致。
  点击保存,回到项目首页。
  就可以看到,原先的立即构建已经变成了Build with Parameter
  点击参数构建,就可以看到如下上面我们配置的参数。
  等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。
  另外提一点,更换名称。因为原命名只是构建编号,没有识别度。相信你从无参构建时就想更换了。

  图片.png
  进入项目配置找到→构建环境→勾选Set build Name 设置参数

  图片.png
  重新打包,如上图我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE ,最后效果如下图。

  图片.png

二、生成二维码
  这里必须用到Python这个陌生的语言。第一次接触python,虽只用到冰山一角,但也体会到了他插件化集成的便捷性。
  step.1 准备工作:


[*]  为tomcat 配置文件下载路径
  进入tomcat安装目录→conf→server.xml文件,在Host节点中添加如下配置。
  

    <Contextreloadable="true" docBase="E://JenkinsApk" crossContext="true"         path="/JenkinsApk"/>  


[*]  下载安装Python和pip,依次配置环境变量。
  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文件中有详细的安装使用说明。
  下载中途如果失败, 重新输入命令执行即可,网络不稳定容易出现超时,他没有自动重连机制。
  安装完成后,在Jenkins中配置Python全局变量。这样我们才能使用Python的脚本命令,入下图。
  进入 →系统管理 →系统设置 找到 Enviroment variables


  Paste_Image.png
  step.2 生成二维码
  进入项目→构建→增加构建步骤,选择Execute windowsbatch command,填写qrcode生成二维码的命令

  Paste_Image.png
  上述命令中使用到的$参数,是通过动态拼接指定对于的apk文件。
  生成一个jenkins_app.png的二维码图片,输出路径为 -d之后的路径。
  此时点击保存,再重新构建一次,在配置目录下应该能找到生成的二维码图片了。
  step.3 展示二维码
  找到构建后操作 → 增加构建后操作步骤→Set build description
  使用html标签引用我们的二维码图片和apk文件即可,当然这里我们依然需要动态拼接地址,来锁定目标。

  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的存放路径,需要预先定义好。为了清晰这里使用时间参数BUILD_TIME 作为文件夹区分,二维码图片则只需要用同一名称。
  所以apk下载地址:xx/download/2017-02-10-15-25/apk参数拼接名称.apk
  二维码图片地址:xx/download/2017-02-10-15-25/jenkins_app.png

三、发送通知邮件
  Jenkins自带了邮件通知功能,但是不太好用。跟着老司机的建议使用Email Extension Plugin来做。
  step.1 配置
  进入→系统管理→系统设置→邮件通知
  填写如下配置

  Paste_Image.png
  内容填写完成后,勾选通过发送测试邮件测试配置填写接受邮箱进行测试,如果成功会收到一封如下的邮件。

  Paste_Image.png
  如果失败,在下面会输出红色异常信息,根据异常修改配置再测试直到成功。
  这里直接使用了公司邮箱服务器,一次就通。
  之前使用smtp.qq.com测试一直失败,SSL协议勾选,端口465。如果有同学配置好了,希望能在下方评论或者私信我下。
  step.2 配置邮件内容
  找到 Extended E-mail Notification →高级,填写配置信息。上面的测试通过,只需要抄上来就好了。

  Paste_Image.png
  下面是邮件内信息的拼接参数,我这里只是一个我喜欢的模板,个人喜好和项目组要求可随意修改参数

  Paste_Image.png
  配置内容搞定,下面进入项目中对邮件配置进行引用。
  step.3 添加邮件通知
  进入→配置 →构建后操作 →增加构建后操作步骤 →Editable Email Notification,填写如下配置


[*]  接收者
  我在顶部的自定义参数中设置 有 EMAIL参数,所以这里引用即可。你也可以直接在这里填写邮件地址,一个或者多个。

  Paste_Image.png



[*]  发送者和邮件内容
  下面发送者为,Jenkins 管理员邮箱
  Subject 和 Content 都是引用我们在系统设置中的配置内容。

  Paste_Image.png

  保存重新构建就大功告成了。
  如果遇到问题欢迎下方评论区留言,有留必回。( - - 我也是多亏了其他博主为我解惑)
  此篇是在我部署发布完成后,回头再写的。遇到问题还不少。
  比如,代码中gradle 中的版本 和Jenkins上选择的Gradle版本如果不一样有时会打包失败。python 安装 PIL失败,使用qrcode库时按照博主的命令无法执行等。
  也有其他方式,使用curl 命令行上传到蒲公英(用curl 很久了,但是上传到蒲公英总是返回空数据 大写尴尬),将返回信息打印到日志输出,使用正则匹配到二维码图片连接,但这种方式远不如本文本地生成二维码来的利索和便利,而且保证了每一个apk都有一个唯一的二维码。
页: [1]
查看完整版本: Android