环境描述
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