Ubuntu中安装jenkins+docker,实现项目部署
本人对于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=
#重启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的亲测可安装版!!!
Ubuntu中安装jenkins+docker,实现项目部署的更多相关文章
- ubuntu 中安装jenkins,基于docker运行jenkins
本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中,至于docker如何安装,本文不再描述,大家可以上网查询下,如何安装docker,下面先放上一个使用jenkin ...
- ubuntu中安装Docker
系统要求: 必须时64位的系统,内核最低要求是3.10 查看系统内核: $ uname -r 3.11.0-15-generic 获取最新版本打Docker: $ wget -qO- https:// ...
- 在Ubuntu中安装Docker和docker的使用
1.在Ubuntu中安装Docker 更新ubuntu的apt源索引 sudo apt-get update 安装包允许apt通过HTTPS使用仓库 sudo apt-get install \ ap ...
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
- Ubuntu中安装配置 JDK与apache
一,前期准备: 1.下载apach网址:https://tomcat.apache.org/download-90.cgi 3.下载:jdk网址:http://www.oracle.com/techn ...
- 在ubuntu中安装maven
安装环境 操作系统:ubuntu 14.04.1 server amd64 安装jdk 在安装maven之前,必须确保已经安装过jdk. 安装jdk的方法请参考文章<在ubuntu中安装jdk& ...
- 在centos中安装jenkins master测试环境
在centos中安装jenkins 1)安装目录 pwd (/home/AAA) 2)检查java是否安装 [AAA@Centos_AAA jenkins]$ java -version j ...
- 在Ubuntu中安装Redis
原文地址:http://blog.fens.me/linux-redis-install/ 在Ubuntu中安装Redis R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库.涉及的 ...
- 如何在ubuntu中安装php
如何在ubuntu中安装php 情衅 | 浏览 692 次 发布于2016-05-07 12:36 最佳答案 关于Ubuntu下的LAMP配置步骤: 首先要安装LAMP 就是Apache,PH ...
随机推荐
- ubuntu 安装php xdebug
windows 安装xdebug https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html 一.下载 下载与PHP版兼容的Xdeb ...
- ConcurrentLinkedDeque
import java.util.concurrent.ConcurrentLinkedDeque; /** * ConcurrentLinkedQueue : 是一个适用于高并发场景下的队列,通过无 ...
- HttpClient之EntityUtils工具类
今天看到tttpclient-tutorial上面有这样一句话-----非常的不推荐使用EntityUtils,除非知道Entity是来自可信任的Http Server 而且还需要知道它的最大长度.文 ...
- SpringMvc中乱码问题的解决
一:如果是前台传递的数据有问题. 在tomcat的service.xml中加上: URIEncoding="UTF-8" <Connector URIEncoding=&qu ...
- Yii2 $app总结
//验证登陆 Yii::$app->user->isGuest; //当前user的id Yii::$app->user->id; //当前controller的名称 Yii: ...
- Windows Server服务器之用户界面,任务管理器等
用户界面简化服务器管理.跟Windows 8一样,重新设计了服务器管理器,采用了Metro界面(核心模式除外).在这个Windows系统中,PowerShell已经有超过2300条命令开关(Windo ...
- Codeforces Round #578 (Div. 2) E. Compress Words (双哈希)
题目:https://codeforc.es/contest/1200/problem/E 题意:给你n个单词,你需要把他合成成一个句子,相邻的两个单词,相邻部分相同的话可以把其中一个的删掉 思路:因 ...
- Unity编程标准导引-1.1下载和安装Unity
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan 1.1.下载和安装Unity 1.1.1 选取版本 首先找到Unity官方网站https://s ...
- Yii2.0 for update 行级锁
当我们遇到存在高并发并且对于数据的准确性有要求的场景,需要了解和使用for update 需要注意的点: 1.InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁.否则是表级别 2.for ...
- idea中git stash--解决pull冲突或切换分支问题
场景1:pull代码时提示冲突,本地代码和远程代码有冲突 场景2:当切换分支时,当前分支的代码又不想commit 这两种场景可以使用git stash来解决,将当前未commit的代码暂存起来. 操作 ...