共计 3824 个字符,预计需要花费 10 分钟才能阅读完成。
学习某册子的 CICD 时,装置了 docker 和 jenkins,记录的装置过程和两头碰到的问题。
应用的虚拟机为 Parallels Desktop,配置为 2 核 4G,零碎为 centos 7,下载地址。
装置 docker
在开始装置之前,须要装置 device-mapper-persistent-data
和lvm2
两个依赖。
device-mapper-persistent-data
是Linux
下的一个存储驱动,Linux
上的高级存储技术。lvm
的作用则是创立逻辑磁盘分区。
1. 装置依赖
应用 CentOS
的Yum
包管理器装置两个依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
依赖装置结束后,将阿里云的 Docker
镜像源增加进去。能够减速 Docker
的装置:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 装置 docker
yum install docker-ce -y
3. 启动 docker
装置结束,就能够应用 systemctl
命令来启动 Docker
了。systemctl
是 Linux
的过程治理服务命令,能够帮忙咱们启动docker
。
systemctl start docker
systemctl enable docker
执行一下 docker -v
,能够用来查看Docker
装置的版本信息。也能够帮忙咱们查看 docker
的装置状态;如果失常展现版本信息,代表 Docker
曾经装置胜利。
4. 对于配置阿里云镜像源
在 Docker
装置结束后,之后咱们去拉取 docker
镜像时,个别默认会去 docker
官网源拉取镜像。然而外网比较慢,所以更换为 阿里云镜像仓库
源进行镜像下载减速。
登录阿里云官网,关上阿里云容器镜像服务,点击左侧菜单最上面的 镜像加速器
,抉择CentOS
,依照官网的提醒执行命令,即可更换docker
镜像源地址。
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://***.mirror.aliyuncs.com"]
}
EOF
装置 jenkins
装置完 Docker
后,咱们只是领有了一个能够承载服务的载体。想实现自动化构建,还须要装置一个构建工具Jenkins
。
Jenkins
是一个基于 Java
语言开发的继续构建工具平台,次要用于继续、主动地构建 / 测试你的软件和我的项目。它能够执行你事后设定好的设置和构建脚本,也能够和 Git 代码库做集成,实现主动触发和定时触发构建。
1. 装置 Java
因为 Jenkins
是Java
编写的继续构建平台,所以装置 Java
必不可少。
openjdk
是 SunJDK
的一种开源实现。openjdk 和 sunjdk 的具体区别。
间接应用 yum
包管理器装置 openjdk
即可:
yum install -y java
2. 应用 yum 装置 Jenkins
因为 yum
源不自带 Jenkins
的装置源,咱们须要本人导入一份 Jenkins
装置源进行装置。导入后,应用 yum
命令装置即可。
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
注:wget 前面的参数是大写 O
3. 启动 Jenkins
Jenkins
装置后,会将启动命令注册到零碎 Service
命令中。所以间接应用零碎 service
命令启动 Jenkins
即可。有三个命令能够应用,别离对应启动 / 重启 / 进行。
service jenkins start # 启动 Jenkins
# service jenkins restart # 重启 Jenkins
# service jenkins stop # 进行 Jenkins
4. 给 jenkins 放行端口
在启动 Jenkins
后,Jenkins
会开启它的默认端口 8080。但因为防火墙限度,咱们须要手动让防火墙放行 8080 端口能力对外拜访到界面。
这里咱们在 CentOS
下的 firewall-cmd
防火墙增加端口放行规定,增加完后重启防火墙。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=50000/tcp --permanent
systemctl reload firewalld
服务启动后,拜访 IP:8080
。Jenkins
第一次启动工夫个别比拟长(看服务器性能)
5. 初始化 jenkins 配置
-
解锁 jenkins
在
Jenkins
启动实现后,会主动跳转至上面这个界面。这是Jenkins
的解锁界面,你须要输出寄存在服务器的初始解锁明码能力进行下一步操作。Jenkins
启动后,会生成一个初始密码。该明码在服务器的文件内寄存,咱们能够进入服务器查看明码内容,将明码填写在Jenkins
的管理员明码输入框内:cat /var/lib/jenkins/secrets/initialAdminPassword
点击
持续
按钮,解锁 Jenkins。 -
下载插件
解锁后就到了插件下载页面,这一步要下载一些
Jenkins
的性能插件。因为
Jenkins
插件服务器在国外,所以速度不太现实。须要更换为清华大学的Jenkins
插件源,再装置插件。更换办法:进入服务器,将
/var/lib/jenkins/updates/default.json
内的插件源地址替换成清华大学的源地址,将 google 替换为 baidu 即可。sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
接着点击
装置举荐的插件
即可。
6. 装置结束
插件装置结束后,接着是注册管理员账号。依照提醒一路配置后,直到看到以下界面代表装置胜利。
整体装置后果测试
Jenkins 算是启动胜利了。然而还须要对 Jenkins
做一点简略的配置,才能够让它构建 docker
镜像。
点击 Jenkins
首页 -> 左侧导航 -> 新建工作 ->Freestyle project
新建结束后,找到 构建
一项,抉择 减少构建步骤
,抉择 执行 shell
,输出以下命令:
docker -v
docker pull node:latest
该命令会去拉取一个 nodejs
稳定版的镜像,咱们能够来测试 Docker
的可用性
保留后,咱们点击左侧菜单的 立刻构建 ,Jenkins
就会开始构建。抉择左侧历史记录第一项(最新),点击控制台输入,查看构建日志。
执行后,发现提醒无拜访权限。这里就波及到 Linux
下的 Unix Socket
权限问题
Unix Socket 权限问题
docker
的架构是 C/S
架构。应用 docker
命令时,其实是命令应用 socket
与docker
的守护过程进行通信,能力失常执行 docker
命令。
而在 Linux
中,Unix socket
属于 root
用户,因而须要 root
权限能力拜访。官网的解释:
Manage Docker as a non-root user The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user. If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.
在 docker
中,docker
提供了一个 用户组
的概念。咱们能够将执行 Shell
的用户增加到名称为 docker
的用户组,则能够失常执行 docker
命令。
在 Jenkins
中执行的终端用户为 jenkins
,所以咱们只须要将jenkins
退出到 docker
用户组即可:
groupadd docker # 新增 docker 用户组
gpasswd -a jenkins docker # 将以后用户增加至 docker 用户组
newgrp docker # 更新 docker 用户组
退出后,重启Jenkins
:
service jenkins restart
重启 Jenkins
后,再次执行脚本,此时执行胜利。