zoukankan      html  css  js  c++  java
  • [原] Jenkins Android 自动打包配置

    一、Jenkins自动打包配置

    目标:1. 自动打包;2. 自动上传;3. 友好下载
    

    1. Jenkins简介

    Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。
    减少重复劳动,减少人工成本。
    
    • 持续、自动地构建/测试软件项目;
    • 监控一些定时执行的任务;

    2. Jenkins配置

    • 添加git plugin和 role插件
    • 设置人员权限,根据角色授权
    • 启动访问http://ip/8080即可,见下3.1 开机自启脚本
    • 添加git项目,配置脚本,见下3.2 项目打包脚本3.3 Apk上传脚本

    3. 自动化脚本

    3.1 开机自启脚本

    • jenkins.sh
    #! /bin/sh
    # chkconfig: 2345 10 90
    # description: jenkins ....
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    #prefix=/Users/laifeng/jenkins
    #nohup $prefix/jenkins_start.sh >> $prefix/jenkins.log 2>&1 &
    
    JENKINS_ROOT=/Users/laifeng/jenkins
    JENKINSFILENAME=jenkins.war
    
    
    stop(){
        echo "Stoping $JENKINSFILENAME "
            ps -ef|grep $JENKINSFILENAME |awk '{print $2}'|while read pid
            do
               kill -9 $pid
               echo " $pid kill"
            done
    }
    
    case "$1" in
    start)
        echo "Starting $JENKINSFILENAME "
            nohup java -jar $JENKINS_ROOT/jenkins.war --httpPort=8080 >> $JENKINS_ROOT/jenkins.log 2>&1 &
      ;;
    stop)
      stop
      ;;
    restart)
      stop
      start
      ;;
    status)
      ps -ef|grep $JENKINSFILENAME
      ;;
    *)
      printf 'Usage: %s {start|stop|restart|status}
    ' "$prog"
      exit 1
      ;;
    esac
    
    • jenkins_start.sh
    #!/bin/bash
    
    export ANDROID_HOME=/usr/local/android-sdk
    export GRADLE_HOME=/usr/local/gradle-2.2.1
    export JENKINS_HOME=/Users/laifeng/.jenkins
    
    /Users/laifeng/jenkins/jenkins.sh start
    /usr/local/apache-tomcat-7.0.67/bin/startup.sh
    
    • Mac上开机自启
    sudo defaults write com.apple.loginwindow LoginHook /path/to/script 
    
    设置/path/to/script = /Users/laifeng/jenkins/jenkins_start.sh
    
    

    3.2 自动化打包和上传

    项目打包脚本

    目前是直接运行Gradle命令,可脚本完成复杂需求

    ./gradlew clean assembleDebug
    

    Apk上传脚本

    • deploy.sh
    #!/bin/sh
    
    echo "deploy begin......"
    
    apkName=$1
    
    currDay=$(date +%Y-%m-%d)
    currTime=$(date +%H-%M-%S)
    deployPath="/Users/laifeng/jenkins/android-apks/${currDay}"
    
    #echo "$deployPath"
    
    # 创建文件夹
    if [ ! -d "$deployPath" ]; then
            mkdir "$deployPath"
    fi
    
    # 拷贝文件到目录
    workspaceApkFile="${WORKSPACE}/crazytogether/build/outputs/apk/crazytogether-debug.apk"
    deployApkFile="${deployPath}/${apkName}-${currTime}.apk"
    #echo "$workspaceApkFile"
    #echo "deployApkFile"
    
    cp ${workspaceApkFile} ${deployApkFile}
    
    echo "deploy success......"
    

    Tomcat 文件服务器

    1. 在tomcat安装目录confCatalinalocalhost下建立任意文件名xml文件,比如:download.xml
    	<?xml version="1.0" encoding="UTF-8"?>
    	<Context  path="/download" docBase="D://download" crossContext="true">
    	</Context>
    	
    2. 修改tomcat配置文件,文件目录confweb.xml,要将红色的false改为true
    	<servlet>
    		<servlet-name>default</servlet-name>
    		<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    		<init-param>
    			<param-name>debug</param-name>
    			<param-value>0</param-value>
    		</init-param>
    		<init-param>
    			<param-name>listings</param-name>
    			<param-value>false</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	
    3. 重启tomcat,访问http://127.0.0.1:8080/download
    

    遇到的问题

    • 添加git 项目无法获得权限,创建ssh key ,把本地ssh key 公钥上传到你用户的git server ,在Jenkins 添加认证,ssh 私钥。

    • 自启动脚本无法顺利执行,缺少环境变量,启动的用户不一致,启动顺序有先后,在启动脚本里添加必须的环境变量

    • 自启动的脚本是系统启动的,和登陆用户不是一个环境

    • 先在本地运行保证脚本的正确性

    • 根据Log 查看什么错误

    二、Jenkins邮件配置

    目标:1. 构建自动发邮件;2. 邮件模板;3. 组织友好下载链接;
    

    1. 邮件配置

    1. 添加插件:Email Extension Plugin

    2. 设置SMTP服务器:系统管理->系统设置->在Extended E-mail Notification项设置smtp service。注意设置的不是jenkins邮件通知项。

    3. 设置job邮件配置:

      • 在“增加构建后操作步骤”选择“Editable Email Notification”
      • Project Recipient List,设置接受邮箱,多个邮箱空格隔开即可
      • Content Type,选择为HTML
      • Default Subject,邮件标题
      • Default Content,邮件内容,可以写html
      • 注意:这些选项里面都可以使用“全局邮件变量”,参见链接
    4. 如何设置友好的下载链接:

      • 下载地址每次都会发生变化,主要是“时间变量”
      • “时间变量”,Day,Time需要设置到jenkins的环境变量中,这样后续执行才能共用这些变量,使用
      • “构建环境”:勾选“Inject environment variables to the build process”,在下面"Evaluated Groovy script"选项中设置groovy脚本,添加到环境变量
      • 修改“构建 Excute shell“ deploy.sh脚本,脚本中的时间变量不在是本地定义,而是使用上面设置的构建变量 ${CURR_DAY}, ${CURR_TIME}
      • 修改“Editable Email Notification”-> "Default Content",当前版本根据“时间变量”${CURR_DAY}, ${CURR_TIME}动态生产下载地址
    5. Evaluated Groovy script 添加如下脚本内容,后续的脚本中,可以引用${CURR_DAY}, ${CURR_TIME}

    TimeZone.setDefault(TimeZone.getTimeZone('Asia/Shanghai'))
    def now = new Date()
    def map = [CURR_DAY: now.format('yyyy-MM-dd'), CURR_TIME: now.format('HH-mm-ss')]
    return map
    ```

    1. Email Default Content 内容
    文件下载:<br/><hr/>
    当前版本:<a href="http://10.155.59.205:8081/download/${CURR_DAY}/branch-2.6.1-${CURR_TIME}.apk" target="_blank">点击下载</a><br/>
    历史版本:<a href="http://10.155.59.205:8081/download" target="_blank">http://10.155.59.205:8081/download</a><br/><br/>
    
    构建信息:<br/><hr/>
    项目名称:$PROJECT_NAME<br/>
    构建编号:$BUILD_NUMBER<br/>
    构建状态:$BUILD_STATUS<br/>
    触发原因:${CAUSE}<br/>
    构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/>
    构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/>
    变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
    
    (本邮件是程序自动下发的,请勿回复!<br	>
    

    2. 其他问题

    • smtp邮件服务一致无法正常发生,原因可能出在,ssl授权,smtp端口等问题上
    • 时区问题默认获得的时间少8小时,需要TimeZone为“Asia/Shanghai”
  • 相关阅读:
    单例模式
    工厂模式
    代理模式
    网络问题
    java中System.getProperty()方法详解
    配置logback.xml文件来实现日志文件输出
    Spring MVC 文件上传与下载快速学习
    SpringMVC中的视图和视图解析器
    JSON的概述和简单的操作
    BeanValidate中的注解
  • 原文地址:https://www.cnblogs.com/purediy/p/5160813.html
Copyright © 2011-2022 走看看