本人对于linux系统是个小白,恰逢公司新框架需要docker+jenkins部署项目,所以通过同事口述+一顿乱查,终于实现在虚拟机上搭建的ubuntu系统中 实现jenkins +docker 自动部署拉取项目。
赶紧做个记录!
准备条件:
1、虚拟机内安装ubuntu随后再做记录,虽说同事已经演示过,但是自己还是得记录下。
2、jenkins 需要环境:由于本人直接将jenkins安装于宿主机中(还可以将jenkins安装于docker中---这个随后再研究,一步一步来),所以需要JDK+Tomcat环境做支撑
ubuntu 中JDK8+Tomcat8环境的安装另做记录;
3、本文只记录Jenkins和dockers的安装。
安装docker:
借鉴同事现成方法:
sudo apt-get updat
说明:更新系统软件(为啥?不知道)
sudo apt-get install apt-transport-https ca-certificates
说明:安装ssl证书--因为要访问https协议的网站
curl -sSL https://get.daocloud.io/docker | sh
说明:下载并安装docker,安装完成后自动启动了
安装jenkins
网上查了很久也试过好几个方法有的不是很靠谱也很麻烦,现在把本人亲测的一个靠谱的方法做记录,其它方法等有空了再做研究
包含在默认Ubuntu软件包中的Jenkins版本往往落后于项目本身的最新版本。 为了利用最新的修复和功能,我们将使用项目维护的软件包来安装Jenkins。
首先,我们将存储库密钥添加到系统。
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
添加密钥后,系统将返回OK
。 接下来,我们将Debian包存储库地址附加到服务器的sources.list
:
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
当这两个都到位时,我们将运行update
,以便apt-get
将使用新的存储库:
sudo apt-get update
最后,我们将安装Jenkins及其依赖项,包括Java:
sudo apt-get install jenkins
指定早期版本可以安装
sudo apt-get install jenkins=2.138.1
如果太慢的话 可以去官网下载后 再安装
启动jenkis
sudo /etc/init.d/jenkins [start|restart|stop]
浏览jenkins
打开我们的浏览器输入jenkins的服务器地址,在这里我的是192.168.44.135
http://192.168.44.135:8080
但是呢有时候这个端口就会被万恶的tomcat占用我们不得不修改jenkins的端口(此时如果你打开的是jenkins此步骤可以省略)
1、修改jenkins端口
$ sudo vi /etc/default/jenkins
记录vi编辑器的操作步骤1、 o --
开始编辑输入
ESC --推出编辑:wq --保存并推出 :q! --强制退出,不保存
#修改如下内容 HTTP_PORT=8085 #重启jenkins服务 $ sudo /etc/init.d/jenkins restart
首次进入jenkins如要输入密码,密码位置:/var/lib/jenkins/secrets/initialAdminPassword,查看命令
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
插件安装
点击“Install suggested plugins”,即安装推荐的插件:
开始安装插件,安装插件比较慢,要多等一会儿
创建管理员账户
创建任务
由于我不需要什么后台的编译只需要编译流水线,填写docker指令,因此就没有配置jdk maven什么的。因此只创建了一个流水线项目
保存之后,点击立即构建,会发现死活都编译不过去,各种失败!接下来我们逐个击破它!
第一个问题:没有权限的问题(截图没有保留随后添加)
我的当前登陆用户是dh
在Ubuntu下,当执行apt-get install方式安装Jenkins的时候,会自动创建jenkins用户,这是一个没有用户目录的账号。
可想而知jenkins用户肯定是没有什么权限的,所以我们要想办法让jenkins用dh账户运行
将dh用户添加到jenkins用户组中,让dh用户拥有管理jenkins的权限
$ sudo gpasswd -a dh jenkins
现在root可以管理jenkins了,我们需要配置jenkins的配置文件让jenkins用dh身份运行,配置文件在/etc/default/jenkins
#打开文件 vi /etc/default/jenkins #修改用户--只修改这一个地方 JENKINS_USER=dh JENKINS_GROUP=dh
ok,重启jenkins
$ sudo /etc/init.d/jenkins restart
第二个问题
由于jenkins的工作目录在/var/lib/jenkins我们查看下它的所属用户和所属组
这里显然是不对的,由于我们把jenkins的默认运行用户改成了dh,接着改
$ sudo chown -R dh:dh /var/lib/jenkins
再重启jenkins
$ sudo /etc/init.d/jenkins restart
ok,没毛病了,这回跑通了
第三个问题:docker守护进程拦截不能直接执行docker命令
我的解决方案 在配置文件中 加上sudo 执行docker指令
网上还有把当前的用户添加到docker用户组中(这个方法我没有试过)附上查到的方法:
问题描述
安装完docker后,执行docker相关命令,出现
”Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied“ 原因
摘自docker mannual上的一段话
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进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
解决方法1
使用sudo获取管理员权限,运行docker命令
解决方法2
docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用
第四个问题:执行sudo命令得输入当前用户的密码,以切换至root用户
问题描述
上述处理完成后 执行发现
sudo: no tty present and no askpass program specified
解决方法:
给jenkins添加不用密码使用sudo
的权限。
sudo vi /etc/sudoers
有时候发现上述 编辑不能保存:则可以执行如下命令
sudo visudo
保存文件(注意保存的时候修改文件名,文件名后缀不要加上默认的.tmp,即可覆盖原文件)
Ctrl+O
退出编辑 Ctrl+X
在sudoers文件中加一行:
jenkins ALL=(ALL) NOPASSWD:ALL
执行完上述操作后发现还是不行!!!!!为毛线呢? 原来我的用户是dh 虽然jenkins安装时自创了个用户叫jenkins但是之前我已经改成dh来管理jenkins了所以需要添加
dh ALL=(ALL) NOPASSWD:ALL
到此可以终于可以构建了!!!!!!!
另外,记录个小事,登陆阿里云仓库的时候 用-u 和-p 不然阿里云提示没有权限
记录结束。
下次记录JDK+TOMCAT的亲测可安装版!!!