【问题标题】:How to build a docker image for jenkins with android and docker build support如何使用 android 和 docker build 支持为 jenkins 构建 docker 镜像
【发布时间】:2018-10-06 20:29:26
【问题描述】:

我目前正在尝试构建自己的 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 映像的正确方法吗?

提前致谢,

问候,

迈克尔

【问题讨论】:

  • 你能帮我解决同样的问题吗?请检查问题一次click here

标签: android docker jenkins docker-compose


【解决方案1】:

在我更改了 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 命令行操作。

【讨论】:

    【解决方案2】:

    你需要在 docker 中运行 docker。

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

    这是good description

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

    【讨论】:

    • 我尝试将 docker.sock 作为卷添加到我的 docker-compose.yml,但我的容器中仍然没有安装 docker 可执行文件。我尝试按照您链接的博客中的说明进行操作,但不知何故,似乎没有安装 docker-ce 软件包
    • 您必须执行并安装软件包。一旦重新启动,就会再次被遗忘
    • 以 root 身份执行到容器中并运行 apt-get update && apt-get install docker-ce 我收到以下消息:E: Unable to locate package docker-ce。
    • @KeepCalmAndCarryOn 你能帮我解决同样的问题吗,请检查问题click here
    猜你喜欢
    • 2018-06-19
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2019-07-05
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多