[原] Jenkins Android 自動打包配置

来源:http://www.cnblogs.com/purediy/archive/2016/01/26/5160813.html
-Advertisement-
Play Games

一、Jenkins自動打包配置 目標:1. 自動打包;2. 自動上傳;3. 友好下載 1. Jenkins簡介 Jenkins是基於Java開發的一種持續集成工具,用於監控持續重覆的工作。 減少重覆勞動,減少人工成本。 持續、自動地構建/測試軟體項目; 監控一些定時執行的任務; ...


一、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”

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //本文支持js線上工具測試、轉載請註明出處。 UntitledDocument 點我點我 username:u p w d: 點我點我 出處:http://blog.csdn.net/xuexiaodong009/article/details/66054...
  • Node.js的介紹Node.js的是建立在Chrome的JavaScript的運行時,可方便地構建快速,可擴展的網路應用程式的平臺。Node.js使用事件驅動,非阻塞I/O模型,輕量、高效,可以完美地處理時時數據,運行在不同的設備上。1.1. 誰在用Node.js?從Node.js官方網站的企業登...
  • 詳細代碼: jQuery form插件的使用--處理server返回的JSON, XML,HTML數據 Demo 8 : jQuery form插件的使用--處理server返回的JSON, XML,HTML數據 ...
  • pull解析器:反序列化 讀取xml文件來獲取一個對象的數據 1 import java.io.FileInputStream; 2 import java.io.IOException; 3 import java.util.ArrayList; 4 import java.util.Lis...
  • 上一篇的基礎上,修改了,CardView的佈局和點擊效果總結:CardView的奇葩屬性 :app:cardPreventCornerOverlap="false" 和園角邊框重疊的效果;實現點擊事件是CardView的子佈局!註意:一個細節,沒明白。在CardView控制項的屬性下,android:...
  • 一、協議和代理模式 1.在NSObject.h頭文件中,我們可以看到// NSObject類是預設遵守協議的@interface NSObject { Class isa OBJC_ISA_AVAILABILITY;}// 往上翻看到NSObject協議的聲明@protocol NSOb...
  • 一、定義兩個巨集//鎖屏通知#define NotificationOff CFSTR("com.apple.springboard.lockcomplete")//解鎖通知#define NotificationOn CFSTR("com.apple.springboard.hasBlankedSc...
  • iOS開發過程中有時候難免會使用iOS內置的一些應用軟體和服務,例如QQ通訊錄、微信電話本會使用iOS的通訊錄,一些第三方軟體會在應用內發送簡訊等。今天將和大家一起學習如何使用系統應用、使用系統服務:調用系統應用使用系統服務簡訊與郵件通訊錄藍牙社交Game Center應用內購買iCloudPass...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...