之前写过一篇Mac OSX搭建Jenkins持续集成环境,后来mac从10.11升到了10.11后,Jenkins就不可用了,最近测试一些功能需要再次用到Jenkins,为了杜绝之前发生的问题,这次就用Docker来搭建,记录一下。
安装Docker for mac
随着Docker的不断迭代,官方已经对Mac有了支持,不再像之前那样,mac下搭建个docker还要装各种东西。官方的地址https://www.docker.com/products/docker#/mac。首先下载官方的Docker安装包Docker.dmg,下载完成后安装即可,如果你需要一个GUI界面,可以再下载kitematic,这个可选,可不下载。
配置 Docker 加速器
Docker Hub 提供众多镜像,你可以从中自由下载数十万计的免费应用镜像, 这些镜像作为 docker 生态圈的基石,是我们使用和学习 docker 不可或缺的资源。但是国内的网络环境从Docker Hub上拉镜像速度一般,我们可以使用DaoCloud进行加速,具体使用见官方Mac文档配置 Docker 加速器
构建Docker android环境镜像
新建一个文件,命名为android_sdk_components.env,输入内容:
- 1
- 1
代表我们需要安装这些组件组件,在同目录下新建Dockerfile文件,我们基于Java:8-jdk镜像进行构建,只所以选择这个镜像是因为jenkins也是依赖这个镜像,后续jenkins直接依赖我们构建产生的Android镜像即可。在Dockerfile文件中输入构建命令:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
构建命令很简单,首先就是安装一些依赖,然后是下载android sdk,通过运行无ui的android sdk来安装一些sdk所需的组件,这些组件我们定义在android_sdk_components.env文件中,此外还设置了Android的环境变量。当然除了Android sdk外,还需要安装一下gradle,下载,解压,设置环境变量即可。最后有一个ENV TERM dumb,这个是为了命令行能运行gradle命令。
终端进入Dockerfile所在目录,执行build命令构建镜像docker-android
- 1
- 1
一直等镜像构建完,这里可能需要一定的时间,因为要去下载一些sdk组件。
构建jenkins镜像
jenkins镜像我们使用官方的Dockerfile文件进行定制,首先将官方的源码clone下来,项目地址:https://github.com/jenkinsci/docker
- 1
- 1
clone完成后进入源码目录,修改Dockerfile文件内容,将From镜像修改为刚才我们构建完成的docker-android镜像,即
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
由于docker-android镜像中已经把curl,wget,Git,zip等软件都安装掉了,所以接下来的第二行的安装软件的命令可以去掉,即这一行去掉
- 1
- 1
同时我们为了提权,可能需要安装一下sudo,这个视情况,如果你不需要的话可以不安装,如果需要的话就加上命令
- 1
- 1
还要在USER ${user}前面加上
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
之后进入源码目录,执行docker build命令构建jenkins镜像
- 1
- 1
构建完成后运行容器,进行端口映射
- 1
- 1
这时候等容器运行起来后,浏览器输入http://127.0.0.1:8080,即可进行安装,如果安装界面出现提示你输入密码,这个密码你可以从安装界面提示的文件中找到,也可以从docker的输出log中找到。
生成git ssh key
使用命令进入容器bash终端
- 1
- 1
进入到用户目录
- 1
- 1
生成ssh key
- 1
- 2
- 3
- 1
- 2
- 3
把生成的key加入到你的github账户或者公司代码仓库中去
安装必要的jenkins插件及配置相关内容
这个不详细说,具体见这篇文章中的插件 Mac OSX搭建Jenkins持续集成环境,主要就是配置账户体系,配置ssh key的目录,安装插件。如果插件安装失败的话多安装几次就好了,安装完成后记得重启jenkins。
尝试构建一个gradle项目
新建一个Job,利用安装的Git Plugin插件,使用源码控制中的Git配置源码仓库。
利用安装的插件进行下面两个操作,一个是执行的shell命令,一个是断言构建输出的目录,如果目录下没有东西,则构建失败
尝试构建,构建成功后会如下图所示
jenkins api
jenkins 提供一些restful api进行调用,通过这些api我们可以获得我们想要的信息,比如构建是否成功等等,我们可以通过类似http://127.0.0.1:8080/api/json或者http://127.0.0.1:8080/api/xml获得我们想要的内容,如果对某个job感兴趣,可以使用http://127.0.0.1:8080/job/Test/api/json,如果对该job某次构建感兴趣,可以使用http://127.0.0.1:8080/job/Test/1/api/json,更多restful api见官方文档。
Gitlab集成
之前Gitlab集成到docker的过程中遇到了一点小问题,就是docker 容器中的内容不能持久化,一旦容器重启,容器中的数据也就没了。。。后来试了下官方的Docker for mac 版本,发现这个问题不存在,直接使用gitlab-ce的镜像即可。
- 1
- 1
至于gitlab怎么和jenkins进行集成,自己去研究吧