使用 jenkins 自動化編譯cordova生成 android APK


引言

前文中已經介紹了什么是cordova 為什么要用cordova,基礎的環境搭建以及如何編譯打包生成APK安裝包,接下來我們介紹如何使用Jenkins 自動化編譯打包生成APK安裝包!

服務器搭建

在搭建jerkins之前首先需要一台服務器環境,一個虛擬機或者阿里雲租一台,這里我以虛擬機為例子:

  • 准備一台虛擬機:系統為centos
  • docker環境的搭建

docker 環境的搭建,docker是什么?為什么使用docker? 那么咱們簡單了解下docker是什么

Docker的思想來自於集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標准化了,集裝箱和集裝箱之間不會互相影響。那么我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走。

docker就是類似的理念。現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。

  1. 不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache訪問端口沖突。這個時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現虛擬機隔離應用環境的功能,並且開銷比虛擬機小,小就意味着省錢了。
  2. 你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
  3. 在服務器負載方面,如果你單獨開一個虛擬機,那么虛擬機會占用空閑內存的,docker部署的話,這些內存就會利用起來。

docker的安裝

不清楚docker如何安裝的小伙伴請步我的另一篇文章 docker安裝篇

Jenkins 安裝

簡單的理解,Jenkins只不過是持續集成的一個工具而已!持續集成是什么?傳送門在這里 持續集成是什么?

在這里我准備了一篇我在N年前學習Jenkins的時候留下的文章,傳送門Ubuntu下搭建Jenkins

Jenkins的 Dockerfile

FROM jenkins/jenkins:lts-slim
MAINTAINER shuoer 690515591@qq.com
#切換為root用戶
USER root
#更新當前的shell環境
SHELL ["/bin/bash", "-c"]
#指定android的版本
ARG ANDROID_VERSIONS=android-26
#指定build-tools的版本
ARG ANDROID_BUILD_TOOLS=26.0.2
#指定node的版本
ARG NODE_VERSION=setup_10.x
#android-sdk的home地址
ENV ANDROID_HOME /opt/android-sdk-linux
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/gradle-4.1/bin
#用於干掉每次編譯時總是從Google下載gradle編譯工具
ENV CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL='https://raw.githubusercontent.com/zhaoshuoer/my-docker/master/node/app/public/gradle-4.1-all.zip'
#安裝node、cordova環境
RUN curl -sL https://deb.nodesource.com/${NODE_VERSION} | bash && \
    apt-get install -y nodejs && \
    apt-get install -y build-essential && \
    rm -rf /var/lib/apt/lists/* && \
    npm install -g cordova && \
    npm install -g yarn && \
    curl -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz && \
    tar zxvf docker-latest.tgz && \
    cp docker/docker /usr/local/bin/ && \
    rm -rf docker docker-latest.tgz
WORKDIR /opt
#安裝android環境

RUN curl -O https://downloads.gradle.org/distributions/gradle-4.1-bin.zip && \
    unzip gradle-4.1-bin.zip && \
    curl -O http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \
    tar zxvf android-sdk_r24.4.1-linux.tgz && \
    mkdir /root/.android && \
    touch /root/.android/repositories.cfg && \
    echo y | android update sdk \
        -a \
        --no-ui \
        --filter \
        tools,platform-tools,${ANDROID_VERSIONS},build-tools-${ANDROID_BUILD_TOOLS} && \
    rm -rf android-sdk_r24.4.1-linux.tgz && \
    rm -rf gradle-4.1-bin.zip
# 將 `jenkins` 用戶的組 ID 改為宿主 `docker` 組的組ID,從而具有執行 `docker` 命令的權限。
ARG DOCKER_GID=999 
ARG DOCKER_PORT=8080
USER root:${DOCKER_GID}
EXPOSE ${DOCKER_PORT}

構建Jenkins的docker image

#如果你有梯子的話您大可等上兩三個小時去編譯出來
$ docker build -t jenkins .

#如果您不想編譯,我也提供了編譯好的Jenkins鏡像
#從docker官方hub下載鏡像
$ docker pull shuoer/jenkins:cordova

#或者您也可以從阿里雲下載鏡像地址為:
$ docker pull registry.cn-hangzhou.aliyuncs.com/shuoer/jenkins:cordova

jenkins 啟動腳本

#將該腳本保存為start-jenkins.sh
docker run \
    -d \
    --rm \
    -p 8080:8080 \
    -p 50000:50000 \
    -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
    -v "$PWD/jenkins_home":/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name jenkins \
    shuoer/jenkins:cordova

執行該腳本下載jenkins的docker鏡像並運行該容器

打開瀏覽器查看下jenkins是否啟動,端口為8080

當看到改界面的時候,恭喜您jenkins安裝成功了!接下來我們需要拿到jenkins的密鑰來解鎖安裝jenkins

#進入到jenkins的容器內部
$ docker exec -it jenkins bash
#打印jenkins的密鑰
$ cat /var/jenkins_home/secrets/initialAdminPassword


將密鑰粘貼到瀏覽器中 點擊 Continue 按鈕 進入安裝插件界面

由於網絡原因,安裝過程可能會有點慢!

插件安裝完成之后創建一個管理員賬戶

賬戶創建完成之后,進入jenkins 到此jenkins的安裝已全部完成

創建jenkins任務

創建一個自由風格的項目

添加源碼管理

添加構建步驟

添加編譯腳本

添加完成之后點擊保存,構建cordova android 版 生成 APK 安裝包

在首次編譯的時候由於需要下在各種依賴包耗時會比較長


說明

如果將以上技術棧描述清楚需要不小的篇幅,所以我會將文章進行拆分:

1. Hybrid App 開發實踐總結 ~開篇
2. cordova的環境配置和創建第一個android App
3. 使用 jenkins 自動化編譯cordova android 生成 APK(本文)
4. 服務器端code-push-server、mysql服務的架設
5. 客戶端code-push插件的引入及code-push-cli的使用
7. 如何使用純shell編寫一個快速搭建開發者環境的命令行工具和安卓端真機調試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM