Jenkins 部署Docker 踩坑记录

2,110 阅读2分钟

Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。


最近在自己新买的阿里云服务器上搭Jenkins,踩了一下坑,写下来权当备忘,同时供有同样问题的人做个参考吧。

安装过程我就不赘述了,关于webhook 配置可以参考: 这篇文章

基于 Docker的jenkins 无法使用docker 命令

一开始我是用在docker-compose.yml 用以下配置去构建jenkins 的(用此配置构建jenkins 前请先执行mkdir -p /var/jenkins_homechown -R 1000:1000 /var/jenkins_home 命令);

version: '3'
services:
    jenkins:
    image: 'jenkins/jenkins:lts'
    container_name: jenkins
    restart: always
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - '/var/jenkins_home:/var/jenkins_home'
...

但是跑起来之后发现构建过程中会报错,找不到docker-compose 命令,查看了控制台输出之后发现,在容器内部的jenkins 无法访问到外部的命令,这就很尴尬了。

后来查了一下,如果需要访问外部容器的话,可以在volumes下加上

volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # 将宿主机的 Docker 程序挂载到 Jenkins 容器内部
      - /usr/bin/docker:/usr/bin/docker:ro
      - /var/jenkins_home:/var/jenkins_home

或者直接不要使用Docker 构建Jenkins,直接安装到系统中,具体安装教程可以参考: centos下搭建Jenkins持续集成环境(安装jenkins)

webhook无法推送

上述的坑完结后,提交代码到github,发现没有触发构建,在github的Webhooks 中点击Edit 查看提交记录,发现是因为没有成功发送到jenkins 服务上

经测试发现,需要在系统管理 - 全局安全配置下,将设置改成如下即可:

Couldn't connect to Docker daemon... 报错

跑完了上面的坑,终于顺利触发构建了,蓝鹅,还是又报错了,看了一下日志,发现报了Couldn't connect to Docker daemon...的错,在官方说明里看了下,因为Docker 进程是绑定在Unix socket的,而Unix socket 是被root 用户拥有的,其他用户身份只能通过root 去跟Docker 交互,因此,我们可以通过将Jenkins 跟Docker 加到同一用户组下的方式来解决,如下:

  1. 创建docker 用户组
sudo groupadd docker
  1. 将Jenkins 加入到Docker 用户组
sudo gpasswd -a jenkins docker
  1. 重启进程
systemctl daemon-reload
systemctl restart docker

至此,问题应该就解决了,撒花🎉🎉🎉🎉