[原] Jenkins Android 自動打包配置

1、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命令,可腳本完成複雜需求html

./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 私鑰。
  • 自啓動腳本沒法順利執行,缺乏環境變量,啓動的用戶不一致,啓動順序有前後,在啓動腳本里添加必須的環境變量
  • 自啓動的腳本是系統啓動的,和登錄用戶不是一個環境java

  • 先在本地運行保證腳本的正確性
  • 根據Log 查看什麼錯誤android

2、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}git

    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 內容web

文件下載:<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」
相關文章
相關標籤/搜索