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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM