jenkins docker 错误总结

环境描述
docker1.12
Jenkins2.26
docker运行Jenkins镜像
Jenkins使用docker命令
 
 
1、docker运行Jenkins
 
docker run -p 8080:8080 -p 50000:50000 -d -v /home/jenkins_home/:/var/jenkins_home  --name jenkins jenkins:latest
 
 
2、修改docker配置文件,添加红字部分
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
 
 
3、将Jenkins加入root和dockerroot组中
gpasswd -a jenkins root
 
gpasswd -a jenkins dockerroot
 
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),0(root),993(docker),992(dockerroot)
 
 
4、安装二进制的kubectl
 
 
tar -xzvf kubernetes-server-linux-amd64.tar.gz
 
cd kubernetes
 
cp -r server/bin/kubectl /usr/local/bin/
注:kubectl跨级群操作的话要另外学
 
 
5、验证 登录Jenkins镜像后看看是否可以使用docker和kubectl命令
 
docker exec -it jenkins镜像ID bash
 
如果没有问题就可以配置Jenkins构建了。
 
报错:
Jenkins构建时 调用docker push命令将项目服务上传到私有仓库nexus上

 

 
解决方法:
1、在Jenkins宿主机和nexus宿主机上登录私有库,这时会在~/.docker/config.json生成配置docker login
 
2、如果使用的是pipeline构建的话,就要在docker.withRegistry上添加私有库登录时的用户和密码首先在Jenkinsweb上创建证书并记住这个证书的ID号
 
然后打开Jenkinsfile文件
 
docker.withRegistry('http://192.168.11.102:5000','docker-regis'){ //前面是私有库地址,后面的这个就是证书ID
docker.withServer('tcp://192.168.11.101:2376'){ // jenkins的宿主机暴露出来的docker
         def app = docker.build "saas/${spaceName}/service/${ServiceName}"
         app.push '${ServiceVersion}'
    }       
}       

 

报错信息II:
kubectl需要连接不同的k8s集群时:
 
构建时需要用到kubectl的配置文件,但是提示权限不够或者没有该上下文
 
[saas.mtsp.service] Running shell script + kubectl config use-context saas-kubernetes-admin@kubernetes error: open /var/jenkins_home/.kube/config: permission denied
或者
 
error: no context exists with the name: "saas-kubernetes-admin@kubernetes".
 
解决方法
 
在Jenkins中他用的文件都是Jenkins的权限
 
chown jenkins:jenkins /root/.kube/config
 
在启动Jenkins镜像时 添加该选项
 
-v /root/.kube/config:/var/jenkins_home/.kube/config
 
报错信息III:
Jenkins中用不了docker命令
 
如果docker是1.12.6版本的,直接用上面的命令就可以
 
如果docker是好版本的,会提示:
 
/var/run/docker.sock没有权限
 
解决方法
chmod o+rw /var/run/docker.sock
高版本的还可以这么写,
 
注:由于其他原因没有做实际的验证(网上看到的,记录一下)
 
1、由于版本的docker安装时不自动生成dockerroot组,所以手动创建一个
 
groupadd dockerroot
 
2、添加Jenkins到dockerroot组中
 
usermod -aG dockerroot jenkins
 
3、在/etc/docker/daemon.json配置文件中添加一下语句
{
    "live-restore": true,
    "group": "dockerroot"
}
4、重启docker
systemctl restart docker
5、这是再看/var/run/docker.sock的权限为
root:dockerroot

 

 

 

 

 

posted on 2018-09-21 16:38  deauss  阅读(2411)  评论(0编辑  收藏  举报

导航