学习某册子的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
后,再次执行脚本,此时执行成功。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。