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