android - 如何使用 android 和 docker build 支持为 jenkins 构建 docker 镜像
问题描述
我目前正在尝试构建自己的 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”时,我得到了同样的错误。
问题:
- 如何构建 jenkins docker 映像以包含构建 docker 映像所需的二进制文件?
- 这是通过 jenkins 构建 docker 映像的正确方法吗?
提前致谢,
问候,
迈克尔
解决方案
在我更改了 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 命令行操作。
推荐阅读
- performance - Traefik 负载均衡方法
- apache-spark - 使用 kafka 方法和火花流从 kafka 消费会产生不同的结果
- c# - 获取“无法创建“MyBaseClass_0”的实例
- javascript - 我在使用复选框时遇到问题
- apache-spark - 无法在 Kubernetes POD 上部署 spark 历史服务器
- python - Ansible Playbook 在通过 Jenkins 执行时失败:/usr/bin/env: 'python3': No such file or directory
- python - Django - CreateView 不保存
- qt - 在不同的文件夹中安装 qt 应用程序
- android - Hilt - CoroutineDispatcher 上缺少绑定
- java - 错误:无法找到或加载主类 newClass JVM