jenkins+gitlab構建安卓自動編譯環境

    因工作關系接觸到接觸到安卓自動編譯環境,網上的資料都推薦了jenkins,因為第一次接觸安卓和jenkins,踩了不少的坑,有總結才有進步。

   gitlab環境之前已經安裝完成可用,具體步驟另外詳解吧。本例目標是在gitlab可用前提下,通過jenkins將git倉庫的代碼自行編譯打包,生成可用的apk安裝文件。

 一、相關環境

Linux Centos6.3 2.6.32-279.el6.x86_64

 各相關軟件版本

    JDK 1.8.0
    Gradle 2.13
    SDK R24
    git 2.7.1 
     jenkin 2.11

   依賴軟件安裝,   

   git安裝,不可用yum直接的git版本,需要重新下載新版,本例用git2.7.1,編譯安裝即可,下載地址
          https://www.kernel.org/pub/software/scm/git/git-2.7.1.tar.gz
   本例中下載的,JDK,SDK,Gradle 都是解壓后,設置環境變量即可用了
   其中: JDK 解壓目錄為/usr/local/java
       SDK解壓目錄為/an/android-sdk-linux
       Gradle目錄為/an/package/gradle-2.13

    編輯.bashrc文件,設置環境變量,設置完成后使用source ~/.bashrc重新加載配置即可,具體設置如下:

                      #JDK環境變量
        export JAVA_HOME=/usr/local/java
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
        export PATH=$JAVA_HOME/bin: $PATH
                      #SDK環境變量
        export ANDROID_HOME=/an/android-sdk-linux
        export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH
                      #gradle環境變量
        export GRADLE_HOME=/an/package/gradle-2.13
        export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}:${PATH}
    #使用java –version  android –h   gradle –version 三個命令測試安裝是否成功。

   哈哈哈,這里有一個坑,被我踩了,后面再詳細說。 

   SDK更新,切換到android目錄,執行tools/android update sdk –no-ui

   兩個小時左右,確保磁盤有足夠空間,總大小6G左右 

***因為源碼語言指定用 sdk build-tools 22.0.1打包,所以需要另外裝 build-tools的版本,方法如下

1、使用android list sdk –all   查看所有可用的更新包,找到 build-tools22.0.1編碼為8

2、使用android update sdk –no-ui –all –filter 8安裝build包

Note:   android list target   查看本地已經安裝的SDK 

二、安裝jenkins    

  這次使用了jenkins的2.11版,實際上已經有了2.13版,直接到官網下rpm包安裝就好
  Jenkins 官網centos系統的下載頁面:http://pkg.jenkins-ci.org/redhat/

三、jenkins的啟動和初始化配置     

啟動:service jenkins start
     #**運行出錯,出現如下提示**
Starting Jenkins Jenkins requires Java7 or later, but you are running 1.6.0_24-b24 from /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
     #在/etc/init.d目錄下,編輯jenkins文件,將java的目標地址/usr/lib/****改為實際安裝的地址就可以了
使用netsta 可以查看到,8080端口已被監聽,
[root@Centos6 init.d]# netstat -apn | grep 8080
tcp   0   0 :::8080   :::*     LISTEN

使用 http://localhostip:8080即可以訪問jenkins頁面,如果不能訪問,請檢查iptables,本例中將iptables關閉,iptables相關知識請自行腦補
首次登錄,出現的第一個頁面是這樣子的,要通過主機上一個文件來解鎖,這個設計很奇妙

clip_image002.jpg

第二個頁面為選擇安裝插件,因后面還有插件需要安裝,這里選默認就好了,等待默認的插件安裝完成。

完成后的主界面是這樣子的

clip_image004.jpg
1、jenkins插件安裝

#系統管理---管理插件---可安裝插件,選中以下插件安裝
     Git plugin      #必須
     Gradle plugin   #必須 
     GitLab Plugin
     Git client plugin
     Gitlab Hook Plugin

2、初始化設置

系統管理 –>全局化設置里增加以下鍵值

clip_image005.png

系統設置Global Tool Configuration

設置jdk、git 和gradle 安裝路徑(此處有坑)

clip_image007.jpg

四、新建構建任務

   1、選擇構建自由風格的軟件項目

clip_image009.jpg

   2、源碼管理,選git,若沒有出現 git選項,請回頭重新安裝Git plugin插件,填寫gitlab倉庫地址,增加gitlab倉庫驗證方式,gitlab倉庫驗證有點波折,多嘗試就好

   3、構建觸發器

jenkins其實可以和 gitlab 的 hooks結合起來用,有推送就觸發,懶得去研究了,

直接用了SCM排程5分鐘檢查一下,有新更新就打包,也挺好

clip_image013.jpg

第一個參數代表的是分鐘 minute,取值 0~59;

第二個參數代表的是小時 hour,取值 0~23;

第三個參數代表的是天 day,取值 1~31;

第四個參數代表的是月 month,取值 1~12;

最后一個參數代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

如H/5 * * * * 表示的就是每5分鐘檢查一次源碼變化。 

  4、構建

增加Invoke Gradle script,gradle版本選我們自己增那個,不要用默認

clip_image015.jpg 

    5、構建后

     (待研究)

  這樣子就可以開始構建了,點擊立即構建,構建完成時顯示藍色就是構建成功,紅色就是構建失敗了

 構建完成后的apk文件通常放在倉庫目錄的build/outputs目錄下,其實可以用命令在構建完成后拷出去,這個自行腦補吧

五、jenkins加SDK的各種坑

1、構建時提示

Cannot run program "gradle" (in directory "/var/lib/jenkins/jobs/*****/workspace"): error=2, 沒有那個文件或目錄

網上關于沒有文件和目錄的問題,有各種說法,試了最后都沒有解問題,其實是因為gradle的問題,記得我們第一步在系統設置里面指定了gradle的安裝目錄么,在新建構建任務的時候,在構建那一步,gradle 版本后面的下拉框要選,指定的版本,不能用默認,請往上翻,注意我畫了三個箭頭的那張圖。

2、另外一個坑,提示無訪問權限

   我把gradle解壓到了/root目錄下面,jenkins運行時,會使用jenkins的身份運行gradle,就會出現權限不足,無法訪問的情況。

3、Could not init /tmp/hudson1687987969108344361tmp

   未安裝 git,或在系統設置里未指定git安裝路徑

4、出現無法連接http 錯誤

Failed to connect to repository : 
Command "/usr/local/bin/git -c core.askpass=true ls-remote -h 
http://*********************/****r.git HEAD" returned status code 128:
 stdout: 
 stderr: fatal: Unable to find remote helper for 'http'

請檢查git版本,刪除centos自帶的 git,編譯安裝2.7以上版本

5、提示java內存溢出

java.lang.OutOfMemoryError: Java heap space

 更改java的內存棧大?。簊et JAVA_OPTS= -Xms1024m -Xmx1024m

六、所需要依賴到的庫

libstdc++-4.4.7-17.el6.i686

zlib-1.2.3-29.el6.i686

zlib-deve

參考資料:http://www.jianshu.com/p/526fbd59750e


原創文章,作者:N21-沉舟,如若轉載,請注明出處:http://www.www58058.com/24048

(0)
N21-沉舟N21-沉舟
上一篇 2016-07-16
下一篇 2016-07-16

相關推薦

  • LINUX 下正確關機方法

    Linux下正確關機方法 Table of Contents 1關機前 1.1觀察系統使用 1.2通知在線使用者關機 2關機 2.1 sy 2.2 shutdo 2.3 rebo 2.4 ha 2.5 powero 3執行 3.1等級 3.2等級 1關機前準備 1.1觀察系統使用狀態 誰在線:who 聯網狀態:netstat -a 后臺執行的程序:ps -a…

    Linux干貨 2017-08-21
  • LVM邏輯卷管理

    LVM邏輯卷管理 LVM全稱為Logical VolumeManager邏輯卷管理器,LVM是Linux環境中對磁盤分區進行管理的一種機制,是建立在硬盤和分區之上、文件系統之下的一個邏輯層,可提高磁盤分區管理的靈活性。 其中 PV:Physical Volume 物理卷 VG:volume Group 卷組 LV:Logincal Volume 邏輯卷 實驗…

    2017-08-14
  • LVM——如何讓你的磁盤空間可大可小

    邏輯卷管理器(LVM) 允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小 允許在多個物理設備間重新組織文件系統          將設備指定為物理卷          用一個或者多個物理卷來創…

    Linux干貨 2016-08-29
  • iptables/netfilter入門到進階

    一、iptables/netfilter的簡介: iptables:規則管理工具;該系統工具有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfi…

    Linux干貨 2017-05-03
  • 馬哥教育網絡班22期+第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。      文件管理命令有:mkdir  rm  tree  ls  等等  1、mkdir [options] /path/to/somewhere      &…

    Linux干貨 2016-08-22
  • N21沉舟第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; mke2fs -t ex…

    Linux干貨 2016-08-22
欧美性久久久久