设为首页 收藏本站
查看: 1887|回复: 0

[经验分享] Android

[复制链接]

尚未签到

发表于 2018-1-9 18:23:36 | 显示全部楼层 |阅读模式
  如果你并不急于放到服务器上,只是想玩玩这个东西。你可以先下载好这两个下文用到的包。
  下载Tomcat9.0.zip
  下载Jenkins.war

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

DSC0001.jpg

  .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
    DSC0002.jpg

      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 全局属性配置

DSC0003.jpg

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


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


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

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

        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 = [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为服务器输出路径
  
               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文件中需要 一 一 与之对应。
  下面我们进入到Jenkins对上述参数进行对应配置。
  找到 参数化构建过程选项→打勾
DSC0006.jpg

  params1.png
  选择→添加参数


  •   选项参数使用 Choice

  •   字符输入参数使用 String Parameter

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

DSC0007.jpg

  Choice.png
  Dynamic Parameter
DSC0008.jpg

  图片.png
  String Parameter
DSC0009.jpg

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

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

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

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

  图片.png

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


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

        <Context  reloadable="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

DSC00014.jpg

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

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

  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 配置
  进入→系统管理→系统设置→邮件通知
  填写如下配置
DSC00017.jpg

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

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

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

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


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

      Paste_Image.png



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

      Paste_Image.png

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433316-1-1.html 上篇帖子: CI持续集成系统环境 下篇帖子: node服务通过Jenkins上线流程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表