一、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}\n' "$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安装目录\conf\Catalina\localhost下建立任意文件名xml文件,比如:download.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <Context  path="/download" docBase="D://download" crossContext="true">
    </Context>

2. 修改tomcat配置文件,文件目录\conf\web.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
  6. 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”

Jenkins Android 自动打包配置的更多相关文章

  1. [原] Jenkins Android 自动打包配置

    一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...

  2. [原] Jenkins Android 自动打包配置(转)

    一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...

  3. 总结jenkins Android自动打包遇到的坑

    一.ndk-build报错 [root@hejianlai-jenkins LearnGradle]# ndk-build /usr/local/android-ndk-r8/ndk-build: / ...

  4. 使用Jenkins进行Android自动打包,自定义版本号等信息【转】

    之前App在提交测试和最终部署的过程中App打包一直是由开发人员来完成的,由于项目比较大, 再加上Android打包本身就比较慢,所以每次打包还是很耗时的.并且按照严格的研发流程来讲,开发人员应该只负 ...

  5. Android混淆打包配置总结

    Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...

  6. [原] Android自动打包之命令行打包

    Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 ...

  7. docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  8. Jenkins自动打包配置

    当时也是花费了不少时间来配置Jenkins自动打包的问题,觉得还是需要记录一下. 1.安装Jenkins,这个很简单,不需要多说. 2.下载Git Plugin,Gradle Plugin,Andro ...

  9. DevOps系列——Jenkins/Gitlab自动打包部署

    前面只说了DevOps的两个基础组件Jenkins和GitLab,客官也不要着急,我们玩就玩的深入一点,Gitlab和Jenkins的各种配置和 插件很多,也够啃一阵子的,不要照着操作一通就感觉万事大 ...

随机推荐

  1. win10 store 无法连接网络

    当你试过所有的解决攻略 都无效时,那么使用这个教程 关闭以下的蓝色框里的

  2. Markdown内嵌Html语言

    概述 Markdown是内嵌Html语言的,这使得我们可以在Markdown文档里面实现很多有趣的东西.现在记录在此,供自己以后参考,相信对其他人也有用. 介绍 Markdown的语法只有一个目标:作 ...

  3. Oracle中 in、exists、not in,not exists的比较

    最基本的区别: in 对主表使用索引 exists 对子表使用索引 not in 不使用索引 not exists 对主子表都使用索引 写法: exist的where条件是: "...... ...

  4. ABP官方文档翻译 6.5 内嵌资源文件

    内嵌资源文件 介绍 创建内嵌文件 xproj/project.json形式 csproj形式 添加内嵌资源管理器 使用内嵌视图 使用内嵌资源 ASP.NET Core 配置 忽略文件 重写内嵌文件 介 ...

  5. CentOS7 Nvidia Docker环境

    最近在搞tensorflow的一些东西,话说这东西是真的皮,搞不懂.但是环境还是磕磕碰碰的搭起来了 其实本来是没想到用docker的,但是就一台配置较好电的服务器,还要运行公司的其他环境,vmware ...

  6. Apache优化配置:修改最大并发连接数

    此文摘自: http://www.365mini.com/page/apache-concurrency-configuration.htm Apache查看连接数和限制当前的连接数 : http:/ ...

  7. bzoj 4869: [Shoi2017]相逢是问候 [扩展欧拉定理 线段树]

    4869: [Shoi2017]相逢是问候 题意:一个序列,支持区间\(a_i \leftarrow c^{a_i}\),区间求和.在模p意义下. 类似于开根操作,每次取phi在log次后就不变了. ...

  8. MIT-线性代数笔记(7-11)

    第 07 讲 求解 Ax=0 :主变量,特解 矩阵的秩Rank(A):矩阵主元的个数. 找出“主变量”pivotvariables,主列,即主元所在的列,其他列,称为自由列.(自由列表示可以自由或任意 ...

  9. 通过SVG与CSS3实现向上图标

    需求 H5活动页需要用的图标很少,暂时没有使用iconfont的必要性,而通过图片的话额外增加UI的工作量以及增加请求数,前端也有很多实现简单图标的方法,所以就尝试自己去解决,写一个"返回顶 ...

  10. Linux知识体系之磁盘与档案系统管理

    硬盘的物理组成:由许许多多的圆形硬盘盘所组成.宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟. 首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机 ...