Mac OSX Docker下搭建Android+Jenkins+Gitlab

来源:互联网 发布:哪个软件可以买双色球 编辑:程序博客网 时间:2024/05/30 05:41

之前写过一篇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,输入内容:

tools,platform-tools,build-tools-19.1.0,build-tools-22.0.0,build-tools-22.0.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-23.0.1,build-tools-23.0.2,build-tools-23.0.3,build-tools-24.0.0,build-tools-24.0.1,android-14,android-15,android-16,android-17,android-18,android-19,android-20,android-21,android-22,android-23,android-24,extra-android-m2repository,extra-google-m2repository
  • 1
  • 1

代表我们需要安装这些组件组件,在同目录下新建Dockerfile文件,我们基于Java:8-jdk镜像进行构建,只所以选择这个镜像是因为jenkins也是依赖这个镜像,后续jenkins直接依赖我们构建产生的Android镜像即可。在Dockerfile文件中输入构建命令:

FROM java:8-jdkMAINTAINER Zhangqu Li <lizhangqu@weidian.com>ENV DEBIAN_FRONTEND noninteractive# install dependenciesRUN dpkg --add-architecture i386 && \    apt-get update && \    apt-get install -yq libstdc++6:i386 zlib1g:i386 libncurses5:i386 --no-install-recommends && \    apt-get -y install --reinstall locales && \    apt-get install -y git curl zip vim&& \    dpkg-reconfigure locales && \    echo 'ja_JP.UTF-8 UTF-8' >> /etc/locale.gen && \    locale-gen ja_JP.UTF-8 && \    localedef --list-archive && locale -a &&  \    update-locale &&  \    apt-get clean# Download and untar SDKENV ANDROID_SDK_URL http://dl.google.com/android/android-sdk_r24.4.1-linux.tgzRUN curl -L "${ANDROID_SDK_URL}" | tar --no-same-owner -xz -C /usr/local# set envENV ANDROID_HOME /usr/local/android-sdk-linuxENV ANDROID_SDK /usr/local/android-sdk-linuxENV PATH ${ANDROID_HOME}/tools:$ANDROID_HOME/platform-tools:$PATH# install Android SDK componentsCOPY android_sdk_components.env /android_sdk_components.envRUN (while :; do echo 'y'; sleep 3; done) | android update sdk --no-ui --all --filter "$(cat /android_sdk_components.env)"# download gradle RUN wget http://downloads.gradle.org/distributions/gradle-2.11-all.zipRUN mkdir -p /usr/local/gradleRUN unzip gradle-2.11-all.zip -d /usr/local/gradleRUN rm gradle-2.11-all.zipENV GRADLE_HOME /usr/local/gradle/gradle-2.11ENV PATH $GRADLE_HOME/bin:$PATH# support gradleENV TERM dumb
  • 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

docker build -t docker-android . 
  • 1
  • 1

一直等镜像构建完,这里可能需要一定的时间,因为要去下载一些sdk组件。

构建jenkins镜像

jenkins镜像我们使用官方的Dockerfile文件进行定制,首先将官方的源码clone下来,项目地址:https://github.com/jenkinsci/docker

git clone git@github.com:jenkinsci/docker.git
  • 1
  • 1

clone完成后进入源码目录,修改Dockerfile文件内容,将From镜像修改为刚才我们构建完成的docker-android镜像,即

FROM openjdk:8-jdk修改为FROM docker-android:latest
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

由于docker-android镜像中已经把curl,wget,Git,zip等软件都安装掉了,所以接下来的第二行的安装软件的命令可以去掉,即这一行去掉

RUN apt-get update && apt-get install -y git curl zip && rm -rf /var/lib/apt/lists/*
  • 1
  • 1

同时我们为了提权,可能需要安装一下sudo,这个视情况,如果你不需要的话可以不安装,如果需要的话就加上命令

RUN apt-get install -y sudo
  • 1
  • 1

还要在USER ${user}前面加上

### 如果没有安装sudo,这里也不需要执行RUN echo "${user}:${user}" | chpasswd  RUN echo "${user}   ALL=(ALL)       ALL" >> /etc/sudoers ### 加在这个前面USER ${user}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

之后进入源码目录,执行docker build命令构建jenkins镜像

docker build -t docker-jenkins . 
  • 1
  • 1

构建完成后运行容器,进行端口映射

docker run --name=myjenkins -d -p 8080:8080 -p 50000:50000 docker-jenkins
  • 1
  • 1

这时候等容器运行起来后,浏览器输入http://127.0.0.1:8080,即可进行安装,如果安装界面出现提示你输入密码,这个密码你可以从安装界面提示的文件中找到,也可以从docker的输出log中找到。

生成git ssh key

使用命令进入容器bash终端

docker exec -i -t myjenkins /bin/bash
  • 1
  • 1

进入到用户目录

cd ~
  • 1
  • 1

生成ssh key

git config --global user.name "lizhangqu"git config --global user.email "lizhangqu@weidian.com"ssh-keygen
  • 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的镜像即可。

docker run --name=mygitlab -d -p 4433:443 -p 2222:22 -p 8000:80 gitlab/gitlab-ce:latest
  • 1
  • 1

至于gitlab怎么和jenkins进行集成,自己去研究吧

原创粉丝点击