学习某本书的CICD时,安装docker和jenkins,记录一下安装过程和中间遇到的问题。使用的虚拟机是ParallelsDesktop,配置为2核4G,系统是centos7,下载地址。在安装docker之前,需要先安装device-mapper-persistent-data和lvm2依赖,然后再开始安装。device-mapper-persistent-data是Linux下的一个存储驱动,Linux上的一种高级存储技术。lvm的作用是创建逻辑磁盘分区。1、安装依赖使用CentOS的yum包管理器安装两个依赖:yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2安装依赖后,添加阿里云的Docker镜像源。可以加快安装Docker:sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2。安装dockeryum安装docker-ce-y3。启动docker安装完成后,可以使用systemctl命令启动Docker。systemctl是一个Linux进程管理服务命令,可以帮助我们启动docker。systemctlstartdockersystemctlenabledocker执行docker-v,可以用来查看Docker安装的版本信息。也可以帮助我们查看docker的安装状态;如果版本信息显示正常,则表示Docker已经安装成功。4、关于阿里云镜像源的配置安装好Docker后,我们去拉取docker镜像时,一般都会默认去官方的docker源拉取镜像。但是外网比较慢,所以换成阿里云镜像仓库源,加快镜像下载速度。登录阿里云官网,打开阿里云容器镜像服务,点击左侧菜单下方镜像加速器,选择CentOS,根据官网提示执行命令更改源地址码头镜像。mkdir-p/etc/dockertee/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:yuminstall-yjava2。使用yum安装Jenkins由于yum源没有自带Jenkins安装源,所以我们需要导入一个Jenkins安装源进行安装。导入后使用yum命令安装。wget-O/etc/yum.repos.d/jenkins.repohttps://pkg.jenkins.io/redhat-stable/jenkins.reporpm--importhttps://pkg.jenkins.io/redhat-stable/jenkins.io.keyyuminstalljenkins注意:wget后面的参数是大写的O3。启动JenkinsJenkins安装完成后,会在系统Service命令中注册启动命令。所以直接使用系统服务命令启动Jenkins就可以了。共有三个命令可用,分别对应启动/重启/停止。servicejenkinsstart#启动Jenkins#servicejenkinsrestart#重启Jenkins#servicejenkinsstop#停止Jenkins4。为jenkins释放端口启动Jenkins后,Jenkins将打开其默认端口8080。但是由于防火墙的限制,我们需要手动让防火墙允许8080端口对外访问该接口。这里我们在CentOS下的firewall-cmd防火墙中添加端口放行规则,添加完成后重启防火墙。firewall-cmd--zone=public--add-port=8080/tcp--permanentfirewall-cmd--zone=public--add-port=50000/tcp--permanentsystemctlreloadfirewalld服务启动后访问IP:8080.Jenkins第一次启动通常需要很长时间(取决于服务器性能)5.初始化jenkins配置并解锁jenkins。Jenkins启动完成后,会自动跳转到如下界面。这是Jenkins的解锁界面。需要输入服务器保存的初始解锁密码,才能进行下一步操作。Jenkins启动后,会生成一个初始密码。密码存储在服务器文件中。我们可以进入服务器查看密码内容,在Jenkins管理员密码输入框中填写密码:cat/var/lib/jenkins/secrets/initialAdminPassword点击Continue按钮解锁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项目后,找到构建项,选择添加构建步骤,选择执行shell,输入如下命令:docker-vdockerpullnode:latest这个命令会拉取一个nodejs稳定版的镜像,我们可以测试Docker的可用性保存后,我们点击左侧菜单的BuildNow,Jenkins就会开始构建。选择左侧历史中的第一项(最新),点击控制台输出,查看构建日志。执行后发现没有访问权限。这就涉及到Linux下的UnixSocket权限问题。UnixSocket权限问题。docker的架构是C/S架构。在使用docker命令时,该命令实际上是使用socket与docker的daemon进程进行通信,从而使docker命令能够正常执行。在Linux中,Unix套接字属于root用户,因此需要root权限才能访问它。官方解释:ManageDockerasanon-rootuserdockerdaemon绑定到Unixsocket而不是TCP端口。默认情况下,Unix套接字由用户root拥有,其他用户只能使用sudo访问它。docker守护进程始终以root用户身份运行。如果你不想在使用docker命令时使用sudo,创建一个名为docker的Unix组,并向其中添加用户。当docker守护进程启动时,它使Unix套接字的所有权由docker组读取/写入。在docker中,docker提供了用户组的概念。我们可以将执行Shell的用户添加到名为docker的用户组中,就可以正常执行docker命令了。Jenkins中执行的终端用户是jenkins,所以我们只需要将jenkins添加到docker用户组即可:groupadddocker#添加一个新的docker用户组gpasswd-ajenkinsdocker#将当前用户添加到docker用户组newgrpdocker#更新加入docker用户组后,重启Jenkins:servicejenkinsrestart重启Jenkins后,再次执行脚本,执行成功。
