我正在开发一个应用程序,希望使用Jenkins进行持续集成,并且我想要控制CI的环境。我在OS X上进行本地开发,并将其推送到远程Ubuntu 16.04 VM。所有这些都导致了Docker的出现。基本上,我想要的是Jenkins-in-Docker,但也需要Docker-in-Jenkins。我的构建slave(s)最初将仅限于master。
现在,我已经阅读了过去几天关于Docker的一些文章,但我仍然不完全确定我是否深入理解它。因此,提出这个问题。
目前,这是我的设置:
Jenkins: /docker-compose.yml
上述设置很好用——直到我在Jenkins中使用Docker。虽然已经安装了Jenkins,但是当我构建任何需要使用Docker的作业时,会出现以下错误:
现在,我已经阅读了过去几天关于Docker的一些文章,但我仍然不完全确定我是否深入理解它。因此,提出这个问题。
目前,这是我的设置:
Jenkins: /docker-compose.yml
version: '3'
services:
jenkins:
build: ./jenkins
volumes:
- /var/run/docker.sock:/var/run/docker.sock # allowing docker-in-docker
- ./jenkins_home:/var/jenkins_home
ports:
- 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的作业时,会出现以下错误:
CI源代码:试图连接unix:///var/run/docker.sock的Docker守护进程套接字时,遇到权限被拒绝的问题:Post (...) dial unix /var/run/docker.sock: connect: permission denied
/Jenkinsfile
pipeline {
agent { dockerfile true }
stages {
stage('Initial') {
steps {
println 'Hello world!'
}
}
}
}
/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执行,你可能会对发现的内容感到惊讶。(2) 尝试绘制每个容器的容器、卷挂载、用户和组的图像(我以前做过,觉得很有帮助)(3)先在本地搞定。 首先在Jenkins上学习这个东西是我称之为“艰难的方法”。 - mkobit