Docker+Jenkins Android 自动化编译

Docker+Jenkins+Android

注:文章内容或多或少有借鉴,如果侵权,请联系我们删除修改。
Jenkins插件安装失败?更新到最新版本就可以了,详情请查看以下内容。

Docker

Docker 是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

而 Linux 容器是 Linux 发展出的另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。

对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。

程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类

Docker运用场景

1. Automating the packaging and deployment of
applications(使应用的打包与部署自动化)
2. Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
3. Automated testing and continuous
integration/deployment(实现自动化测试和持续的集成/部署)
4. Deploying and scaling web apps, databases and backend
services(部署与扩展webapp、数据库和后台服务)

Docker的三个概念

  1. Image(镜像)
  2. Container(容器)
  3. Repository(仓库)

预习图示:
来源网络
提示:具体详情可以查看>>>docker容器和镜像区别

Image(镜像)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)就是一堆只读层(read-only layer)的统一视角:

图示:
来源网络
如图左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够 在主机(译者注:运行Docker的机器)的文件系统上访问到。统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统,就是右边看到这个视角的形式。

Container(容器)

容器(Container)的定义和镜像差不多,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
容器 = 镜像 + 可读层
来源网络

Repository(仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。

一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

当用户创建了自己的镜像之后就可以使用 Push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 Pull 下来就可以了。

注:由于Docker hub 服务器在国外,无法上传镜像(提示超时),本文采用阿里云服务存储。

Docker视频地址

http://www.jsdaima.com/video/490.html
http://www.jsdaima.com/video/459.html
http://www.jsdaima.com/video/384.html
http://www.jsdaima.com/video/371.html
http://www.jsdaima.com/video/363.html

Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
注:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

Jenkins中文教程文档

https://jenkins.io/zh/doc/pipeline/tour/getting-started/

安装(简单粗暴)

注:环境>>>macOS,其他平台大同小异!

docker安装

1.== 打开docker官网并且下载mac docker桌面版(需要注册docker账号),下载后安装即可。==
Docker官网
docker下载
2. 在启动台中打开,效果如下:
启动台应用图标
状态栏中显示的docker
到此docker安装成功。

jenkins安装

注:以下操作在终端完成!!

  1. 打开控制台(终端)
    在这里插入图片描述
  2. 按顺序输入命令:

docker pull jenkins/jenkins
下载jenkins

docker run -d --name 容器名称 -p 8080:8080 -p 50000:50000 jenkins/jenkins
创建容器

docker ps -a
查看容器列表是否生成 ”容器名称“ 的 容器

docker start 容器名称
运行容器

docker ps
查看容器是否运行

docker logs 容器名称
查看jenkins运行的日志 找到init…pass

效果图:
在这里插入图片描述
解析:终端运行以下命令查看容器运行日志信息;注意以下列出部分:

docker logs -f android01




Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

a8ae880e37a7449d811224b452427dbr

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword




a8ae880e37a7449d811224b452427dbr

这个是初始设置密码,复制后打开主机浏览器,输入地址:http://localhost:8080

等待加载后出现Jenkins界面:把终端复制的密码粘贴进去。
管理员密码就是从终端复制的密码
接着接续走下一步:
按需求选择
选择需要Jenkins的插件(版主的无需修改任何url,全部插件都能下载安装!):
在这里插入图片描述
等待插件下载安装完成:
在这里插入图片描述
跳过实例配置提示框后配置登录用户和密码。完成后点击“开始使用Jenkins”;
在这里插入图片描述
最终页面:
在这里插入图片描述
到此,安装完成!

附加Docker命令

在这里插入图片描述

docker run -it -d --name test-centos1 centos

命令注释:-it : 进行交互式操作
     -d : 等同于 -d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。
     --name : 容器启动后的名字,默认不指定,将会随机产生一个名字。或者使用 -name=“containers_name”
     centos:使用的镜像名称

Android自动化编译部署

配置工程

配置Android SDK

先拷贝主机的 android sdk 到 docker 容器中

docker cp -r /Users/yao/Library/Android/sdk/ jenkkins:/root/home/Android/sdk
dcker cp -r 本地目录 容器名称:容器中的具体路径

点击系统管理然后选着 系统设置,找到全局属性勾选环境变量
增加键值对,最后点击保存
例如:
在这里插入图片描述

配置Gradle

点击系统管理然后点击全局工具配置
配置Git;JDK;Gradle,最后保存。

  1. JDK和Git可以不用配置了,如果使用的Jenkins/Jenkins的镜像 系统默认已经安装好openjdk8,所以不用做任何操作(根据个人需求再定)
    如何查看容器中是否安装好jdk?
    【注意命令】
    在这里插入图片描述
  2. 至于Gradle 可以按照配置android sdk的做法重本地拷贝到容器中就好。
    也可以点击新增Gradle的方式来添加。最后保存!
    如图片中的方式2选一 即可
    在这里插入图片描述

创建工程

  • 点击–新建任务
  • 输入任务名称,例如:yyyy
  • 选着–构建一个自由风格的软件项目
  • 最终点击确定

如图:
在这里插入图片描述
项目配置页面
使用的是 github 项目

  • 找到 源码管理 选择 Git,配置好git 源码地址 github的账号和密码
    在这里插入图片描述

  • 找到添加构建步骤 选择 Invoke Gradle script,这里选着上面配置的是gradle X.X
    如下图:
    在这里插入图片描述
    最后保存就好了!
    测试是否能自动编译,进入工程,点击立即构建
    在这里插入图片描述
    工作空间就是android studio的一个基本工程:
    在这里插入图片描述
    至于工程配置中其他选项就不多说了(钉钉机器人;显示二维码需要用到的jar包:生成二维码Jar包工具):
    在这里插入图片描述
    注意要将二维码图片展示在历史构建列表中貌似就可以实现了,能直观想到的方式就是采用HTML的img标签,将写入到build描述信息中。

    这个方法的思路是正确的,不过这么做以后并不会实现我们预期的效果。

    这是因为Jenkins出于安全的考虑,所有描述信息的Markup Formatter默认都是采用Plain text模式,在这种模式下是不会对build描述信息中的HTML编码进行解析的。

    要改变也很容易,Manage Jenkins -> Configure Global Security,将Markup Formatter的设置更改为Safe HTML即可。

如有问题可以留言!感谢纠正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿成长

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值