使用 jenkins 自動化編譯cordova for android 生成 APK
引言
前文中已經介紹了什麽是cordova 為什麽要用cordova,基礎的環境搭建以及如何編譯打包生成APK安裝包,接下來我們介紹如何使用Jenkins 自動化編譯打包生成APK安裝包!
服務器搭建
在搭建jerkins之前首先需要一臺服務器環境,一個虛擬機或者阿裏雲租一臺,這裏我以阿裏雲服務器為例子:
- 準備一臺阿裏雲服務器:系統為centos
- docker環境的搭建
準備一臺阿裏雲服務器,準備一個域名指向該服務器,本例暫用 jenkins.zscode.com 不知道如何操作的小夥伴請自行百度,這裏不做過多介紹!
docker 環境的搭建,docker是什麽?為什麽使用docker? 那麽咱們簡單了解下docker是什麽
Docker的思想來自於集裝箱,集裝箱解決了什麽問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麽我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裏封裝的好好的,那我就可以用一艘大船把他們都運走。
docker就是類似的理念。現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。
- 不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache訪問端口沖突。這個時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現虛擬機隔離應用環境的功能,並且開銷比虛擬機小,小就意味著省錢了。
- 你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
- 在服務器負載方面,如果你單獨開一個虛擬機,那麽虛擬機會占用空閑內存的,docker部署的話,這些內存就會利用起來。
docker的安裝
不清楚docker如何安裝的小夥伴請步我的另一篇文章 docker安裝篇
nginx的安裝
對於做web開發的小夥伴對nginx一定不會陌生,但是我還是準備了一篇基礎的安裝部署文章 Nginx的安裝以及反向代理和負載均衡的配置 文章介紹了不使用docker的情況下如果使用nginx,接下來我們用docker重寫下!
nginx 啟動腳本
#將該腳本保存為start.sh
docker run -d --rm -p 80:80 -p 443:443 -v "$PWD/conf.d":/etc/nginx/conf.d/ -v "$PWD/html":/usr/share/nginx/html/ --name nginx nginx:alpine
執行該腳本後nginx的服務已經起來了,暫且不說,Jenkins架設完後回頭再配置
Jenkins 安裝
簡單的理解,Jenkins只不過是持續集成的一個工具而已!持續集成是什麽?傳送門在這裏 持續集成是什麽?
在這裏我準備了一篇我在N年前學習Jenkins的時候留下的文章,傳送門Ubuntu下搭建Jenkins
Jenkins的 Dockerfile
FROM jenkins/jenkins:lts-slim
MAINTAINER shuoer [email protected]
#切換為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 pull shuoer/jenkins:cordova
jenkins 啟動腳本
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
說明
如果將以上技術棧描述清楚需要不小的篇幅,所以我會將文章進行拆分:
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編寫一個快速搭建開發者環境的命令行工具和安卓端真機調試
使用 jenkins 自動化編譯cordova for android 生成 APK