Jenkins内容补充

由于之前的Jenkins里面出现了一些参数没有说明白, 这篇文章就是内容的补充

其中在前的Jenkins文章中出现了2个参数

  • env.BUILD_SERVER
  • env.IMAGE_REGISTRY

其实这2个就是在Jenkins Web界面的 系统管理 - 系统界面 里添加的全局变量


其中IMAGE_REGISTRY就是自己搭建的docker镜像仓库

如果配置了此项, 原本的Jenkinsfile就可以改为以下:

docker.withRegistry("http://仓库地址:5001")  >>>>  docker.withRegistry(env.IMAGE_REGISTRY)

同时清除镜像的操作可以改为一下:

sh "docker image rm 仓库地址/bookimage:${build_number}"  >>>> sh "docker image rm ${env.IMAGE_REGISTRY}/huobi_image:${build_number}"

env.BUILD_SERVER, 其实这个是docker的自己的tcp远程操控的入口, 实际上是可以不填这个的

但是如果你的Jenkins或者docker是集群之下的, 这个东西就变得很有用了, 原因是这个是开放给主机来控制从机的

但是docker的tcp默认是关闭的, 得修改配置文件才能打开, 不然的话会报出: is the docker daemon runing?的错误提示, 方法如下:

构建镜像时由于使用全局的环境变量, 而实际上0.0.0.0是docker自己的, 所以设置BUILD_SERVER: tcp://172.17.0.1:2375

  • 创建目录: mkdir -p /etc/systemd/system/docker.service.d
  • 创建文件:
cat > /etc/systemd/system/docker.service.d/tcp.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
EOF
  • 配置启动文件: sudo vim /lib/systemd/system/docker.service
修改: 
ExecStart=/usr/bin/dockerd -H unix:// --->  ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  • 重启服务: sudo systemctl daemon-reload / sudo systemctl restart docker.service
  • 查看端口是否打开: ps aux | grep dockerd | grep -v grep

重点说一下目前遇到最大的麻烦, 如果你的docker什么的, 映射的路径还有用户这些是root用户所创建的话, 在使用过程中很容易出现docker.sock和执行打包构建途中调用shell脚本出现权限不足的问题, 前者通过sudo chmod -R 777 /var/run/docker.sock以及把sock映射入容器内可以解决, 但是shell的问题就相对麻烦了, 百度上有解决办法是改Jenkins的总配置文件, 把启动用户改为root, 但是这个只能用在非docker安装的Jenkins, 原因是docker安装的是没有那个配置文件的, 所以所构建Jenkins容器的时候得让他拥有root用户的权限, 我在启动容器的时候加入-u root, 和--privileged=True 也没有解决此问题, 所以我就考虑自己重新打包一个镜像.

  • Dockerfile
FROM jenkinsci/blueocean # 你可以指定你喜欢的版本号, 不带版本号则是最新的
USER root
  • docker-compose
version: "3"

services:
  jenkins_server:
    container_name: jenkins_server
    image: 'myjenkins:1.0'
    privileged: true
    user: root
    restart: always
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - '/home/data/jenkins:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'

使用自己打包的镜像run起来之后, 就不在会出现那种权限的问题了

添加新评论

本站现已启用评论投票,被点踩过多的评论将自动折叠。与本文无关评论请发留言板。请不要水评论,谢谢。

已有 0条评论