如何在Android和Docker构建支持下为jenkins构建docker映像

时间:2018-10-06 20:29:27

标签: android docker jenkins docker-compose

我目前正在尝试构建自己的Jenkins Docker映像,目的是拥有一个Jenkins服务器,该服务器可以构建基于Android gradle的项目和docker映像。

在我的github存储库(https://github.com/mikedolx/docker-jenkins-android中,这是我的docker文件的样子:

FROM xmartlabs/android AS android

USER root
RUN apt-get update && \
        apt-get install -y apt-transport-https curl software-properties-common && \
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
        add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
        apt-get update && \
        apt-cache policy docker-ce && \
        apt-get clean && \
        apt-get install -y docker-ce

FROM jenkins/jenkins

ENV ANDROID_HOME /opt/android-sdk-linux
COPY --from=android ${ANDROID_HOME} ${ANDROID_HOME}
COPY --from=android /usr/lib/jvm/java-8-oracle /usr/lib/jvm/java-8-oracle
COPY --from=android /usr/bin/gradle /usr/bin/gradle
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools

# Unfortunately, "chown" flag seems not to be available for COPY in DockerHub.
USER root
RUN chown -R jenkins:jenkins ${ANDROID_HOME}
USER jenkins

ENV ANDROID_EMULATOR_FORCE_32BIT true

我已经添加了安装docker所需的步骤。我从https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04这个博客中获取了它们。

我可以成功构建映像,并使用以下docker-compose.yml运行jenkins服务器

version: '2.2'

services:

  jenkins:
    image: mikedolx/jenkins-android:latest
    container_name: jenkins
    user: jenkins
    volumes:
      - jenkins-data:/var/jenkins_home
    ports:
      - 8080:8080
      - 50000:50000
volumes:
  jenkins-data:

我有一个管道项目设置来构建此映像(https://github.com/mikedolx/docker-nextcloud)。当我开始构建时,它将在第二阶段停止,并显示以下日志:

[Nextcloud-Github] Running shell script
+ docker build -t mikedolx/nextcloud:14.0.1 --file Dockerfile.14.0 .
/var/jenkins_home/workspace/Nextcloud-Github@tmp/durable-f5e443ce/script.sh: 2: /var/jenkins_home/workspace/Nextcloud-Github@tmp/durable-f5e443ce/script.sh: docker: not found

当我ssh进入jenkins容器并尝试运行“ docker”时,出现相同的错误。

问题:

  1. 我如何构建jenkins docker映像以包含构建docker映像所需的二进制文件?
  2. 这是通过jenkins构建docker镜像的正确方法吗?

预先感谢

此致

迈克尔

2 个答案:

答案 0 :(得分:0)

您需要在docker中运行docker。

因此,总而言之,您将主机docker套接字作为卷安装到Jenkins中,并且容器中具有兼容的docker二进制文件。

这是good description

还有更多需要考虑的问题,例如安全性取决于主机上运行的其他容器以及使用jenkins代理时如何运行它。

答案 1 :(得分:0)

在我更改了Dockerfile中的安装顺序(将所有内容从“ FROM jenkins / jenkins”移至其他位置)之后,我终于在控制台中有了一个Docker二进制文件。现在,当我在jenkins中运行我的构建时,出现以下错误

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

之所以这样,是因为我已经将主机的docker.sock作为一个卷映射到了我的容器中。但是似乎某种程度上权限是错误的。需要检查一下。

编辑:将主机/var/run/docker.sock的所有权更改为jenkins:jenkins之后,我能够在jenkins项目中执行所需的docker命令行操作。