在Docker中设置Jenkins的最佳实践
我正在开发一个应用程序,我希望使用Jenkins进行持续集成,此外,我希望能够控制CI的环境。我正在OSX上进行本地开发,我正在推进一个远程Ubuntu 16.04虚拟机所有这些让我想到了Docker。基本上我想要的是Docker中的Jenkins,但也是Jenkins中的Docker。我的构建从属服务器最初仅限于主服务器 在过去的几天里,我一直在阅读一些关于Docker的帖子,但我仍然不能完全确定我是否深入理解了它。所以这个问题 目前,这是我的设置: 詹金斯:在Docker中设置Jenkins的最佳实践,docker,jenkins,dockerfile,jenkins-pipeline,Docker,Jenkins,Dockerfile,Jenkins Pipeline,我正在开发一个应用程序,我希望使用Jenkins进行持续集成,此外,我希望能够控制CI的环境。我正在OSX上进行本地开发,我正在推进一个远程Ubuntu 16.04虚拟机所有这些让我想到了Docker。基本上我想要的是Docker中的Jenkins,但也是Jenkins中的Docker。我的构建从属服务器最初仅限于主服务器 在过去的几天里,我一直在阅读一些关于Docker的帖子,但我仍然不能完全确定我是否深入理解了它。所以这个问题 目前,这是我的设置: 詹金斯: /docker compose.
/docker compose.yml
版本:“3”
服务:
詹金斯:
建造:/詹金斯
卷数:
-/var/run/docker.sock:/var/run/docker.sock#允许docker中的docker
-/jenkins\u home:/var/jenkins\u home
端口:
- 8080:8080
/jenkins/Dockerfile
FROM docker:17.12 AS docker
FROM jenkins/jenkins:lts
COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
上面的设置工作得很好-直到我在Jenkins中使用Docker。Jenkins已经安装好了,但是当我构建任何使用Docker的作业时,我会得到一个错误
尝试连接到Docker守护程序时,权限被拒绝
插座unix:///var/run/docker.sock: Post(…)拨号unix
/var/run/docker.sock:connect:权限被拒绝
CI来源:
/Jenkinsfile
FROM docker:17.12 AS docker
FROM jenkins/jenkins:lts
COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
管道{
代理{dockerfile true}
舞台{
阶段(‘初始’){
台阶{
打印“你好,世界!”
}
}
}
}
/Dockerfile
FROM python:3.6-slim-jessie
COPY requirements.txt ./
RUN pip install -r requirements.txt --no-cache-dir
CMD ["python"]
现在开始提问强>
首先,显然我缺少容器使用主机Docker守护程序的一些权限。我知道(除其他外)有一些答案
其次,这甚至是我们想要的方式吗?我想以正确的方式学习docker,我不知道我是否遗漏了关于多阶段构建的内容?请与docker一起查看jenkins的此docker文件
FROM jenkins/jenkins:lts
MAINTAINER "artem@aleksashkin.com" Artem Aleksashkin
USER root
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce && \
rm -rf /var/lib/apt/lists/* && \
curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose && \
usermod -aG docker jenkins
USER jenkins
使用此Dockerfile:
FROM jenkins/jenkins
USER root
RUN apt-get update RUN apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common RUN curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - RUN add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \ stable" RUN apt-get update RUN apt-get -y install docker-ce
USER jenkins
Jenkins插件和执行对如何设置进行了假设,这使得使用现有插件尝试和实现这样的设置变得困难。有几种可能加快速度的方法(1)查看执行的Jenkins
docker
命令。Jenkins正在控制Docker的执行您可能会对您的发现感到惊讶(2)尝试绘制每个容器的容器、卷装载、用户和组的图片(我以前做过,发现这对我个人很有帮助)(3)首先在本地解决它。首先在Jenkins上了解这一点,我称之为“艰难之路”。因此,对于被拒绝的权限
——我的第一个猜测是,即使Docker客户端可以与套接字通信,它也没有正确的用户/组来使用。如果您尝试将root
拥有的文件装载到您的工作区并尝试读取它,您可能会看到类似的错误。我建议在代理上运行stat-c%g/var/run/docker.sock
,查看docker套接字所属的组是什么,然后添加args'--group add=that group id'
(from),看看这是否能让您更进一步。您是否阅读了docker推荐的博客文章:?请注意末尾关于在Docker的最新版本中复制Docker二进制可执行文件的警告。你应该把它从Jenkins Dockerfile的最后一行删除。很好的片段。让我的生活变得轻松。请添加openssh服务器以便与docker一起安装好吗?如果有人想使用jenkins作为从机进行调试,就需要ssh。