使用 jenkins 自动化编译cordova for android 生成 APK

引言

前文中已经介绍了什么是cordova 为什么要用cordova,基础的环境搭建以及如何编译打包生成APK安装包,接下来我们介绍如何使用Jenkins 自动化编译打包生成APK安装包!

服务器搭建

在搭建jerkins之前首先需要一台服务器环境,一个虚拟机或者阿里云租一台,这里我以阿里云服务器为例子:

  • 准备一台阿里云服务器:系统为centos
  • docker环境的搭建

准备一台阿里云服务器,准备一个域名指向该服务器,本例暂用 jenkins.zscode.com 不知道如何操作的小伙伴请自行百度,这里不做过多介绍!

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安装篇

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编写一个快速搭建开发者环境的命令行工具和安卓端真机调试

原文地址:https://www.cnblogs.com/shuoer/p/9484881.html

时间: 2024-08-24 09:34:47

使用 jenkins 自动化编译cordova for android 生成 APK的相关文章

android生成apk包出现Unable to add "XXX" Zip add failed问题

最近试图整合umeng至cocos2d-x围棋项目,一切好工作,准备生成apk当出现了大量的数据包 [2014-06-03 20:02:52 - MyApp] Unable to add 'G:\cocos2d-x-2.2.3\projects\MyApp\proj.android\assets\crystal_guardian\background.jpg': Zip add failed [2014-06-03 20:02:52 - MyApp] ERROR: unable to proce

Gradle Android最新自动化编译脚本教程

转自:http://blog.csdn.net/changemyself/article/details/39927381 一.前言 Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. 上面这句话我觉得写得很官方,大家只需知道Gradle可以用来android开发中进行多个项目依赖的自动化编译脚本,知道这点也就知道我们使用它的目的: 为什么不使用Ant做自动化编译脚本,因为ant上手快,但是维护起来太不方便了,有了Gradle你可

Windows下,Ant自动化编译Android项目具体步骤和方法

 备注:若Android项目引用有第三方库,步骤和方法亦适用. 前提是已经安装好Ant. 1,首先需要创建一个批处理命令(*.bat)文件:Ant for Android.bat,文件内写入以下命令: set path=C:\Windows\System32;D:\Java\JDK\bin;D:\Ant\apache-ant-1.9.3\bin;D:\Android\adt-bundle-windows-x86_64-20130522\sdk\tools; start "Ant for An

Android自动化编译设置AndroidManifest.xml中package值(包名)

手动修改Android的AndroidManifest.xml中package值(包名)很简单,手动修改即可.但是项目中需要把Android的项目源代码放到服务器端在客户下载时候动态编译生成,且生成的app签名相同但包名不同(若此时包名相同就是相同的app),这种需求需要在服务器端自动化编译Android源代码时候自动调整AndroidManifest.xml中package值才能实现.查阅相关资料,结合Java对XML文件的读写技术,写了一个方法,让服务器端在编译之前预加载修改AndroidM

Gradle Android最新自动化编译脚本教程(提供demo源码)

一.前言 Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. 上面这句话我觉得写得很官方,大家只需知道Gradle可以用来android开发中进行多个项目依赖的自动化编译脚本,知道这点也就知道我们使用它的目的: 为什么不使用Ant做自动化编译脚本,因为ant上手快,但是维护起来太不方便了,有了Gradle你可以跟项目组的同事说,用Ant的孩子们别苦逼的维护了,赶紧换成gradle吧. 本文面向gradle新手或者以前使用过grad

VS生成Cordova for Android应用之Gradle

原文:VS生成Cordova for Android应用之Gradle 一.Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置. 在使用VS生成Cordova应用时,会自动下载Gradle到用户文件夹. 确认%UserProfile%(就是C:\Users\{userName})目录下有没有.gradle文件夹,没有的话,新建一个. 更多参

Makeflie自动生成依赖,自动化编译

在netbeans里开发,有一个重要文件makefile,是用来编译所有的文件. 项目的目录结构如下,扁平的目录结构,如何实现自动化编译,写makefile呢? 第一版 基础版: CC = g++ CFLAGS = -O3 -DNDEBUG SOURCE =AdaBoost.cpp aodeselect.cpp sample.cpp vfan.cpp kdbext2.cpp tan_gen.cpp petal: ${SOURCE} $(CC) -o [email protected] ${SOU

生成Makefile自动化编译文件

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make.可见,makefile都成为了一种在工程方面的编译方法. 那么如何才能生成Makefile文件呢??好吧,让我们一起进入今天的正题吧! 1.首先生成一个目录:mkdi

Android 命令行编译、打包生成apk文件

一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1.6.0_20\bin3. 例子信息 项目目录:D:\ProjectDemo SDK目录 :D:\android-sdk-windows\platforms\android-8\ 二.命令行编译Android项目 1. 生成R文件 2. Java代码生成class文件 3. class文件生成dex文件