解決Jenkins集成docker插件問題的一些方法
背景
測試環境使用Jenkins集成docker插件實現測試環境一鍵部署服務,首先jenkins已安裝docker build and publish插件,但是運營job出現瞭一系列的問題!
問題一
docker執行報錯,Build step ‘Docker Build and Publish’ marked build as failure,導致這句的問題有很多,更詳細的錯誤信息:jenkins容器不支持docker操作?
分析問題:jenkins是使用docker部署的,那麼在jenkins容器中並不會有docker相關的操作命令,所以執行失敗!
解決方案:需要將宿主機的docker環境映射到jenkins容器中,才能使用docker命令行
docker run --name myjenkins -p 8123:8080 -p 50000:50000 -v /run/docker.sock:/var/run/docker.sock -v /var/jenkins_home:/var/jenkins_home -u 0 -d jenkins/jenkins:lts
再次執行,結果還是不對,沒有解決!
錯誤二
提示bin目錄下無可執行命令?
分析:我們知道安裝的任何一個環境,如果想在linux環境執行它的命令行,都需要加入環境變量:/usr/bin
解決:繼續映射宿主機docker可執行命令
docker run --name myjenkins -p 8123:8080 -p 50000:50000 -v /run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /var/jenkins_home:/var/jenkins_home -u 0 -d jenkins/jenkins:lts
tips:which命令,有點類似whereis 查找命令或者文件:前者查看系統環境變量中的命令(返回第一個結果),後者程序名相關路徑(返回所有匹配的結果)
錯誤三
找不到相關依賴:error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or/libltdl.so.7
分析:jenkins容器內部,因為容器與宿主機沒有共享,在宿主機可以找到該庫:cd usr/lib64/
解決:在宿主機找到libltdl.so.7 依賴庫,掛載容器即可
docker run --name myjenkins -p 8123:8080 -p 50000:50000 -v /run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /var/jenkins_home:/var/jenkins_home -v /var/data/shell:/var/data/shell -u 0 -d jenkins/jenkins:lts
錯誤四
no basic auth credentials 沒有認證
分析原因:這個插件是在jenkins容器內部使用docker命令,build鏡像不會報錯,是在容器內,當需要push到鏡像倉庫時,需要auth
解決辦法:直接的辦法在jenkins的job中加入一行認證,docker login –username=xxxx –password=xxxx nexus.xxxx.com
tips:執行完命令,會在當前目錄生成一個.credentials裡面記錄瞭登錄nexus鏡像倉庫的帳號密碼信息
總結
至此,前面的步驟已經完成瞭jenkins容器內部可以使用docker命令瞭,也就不需要通過shh插件,從容器跳出到宿主機執行build&push操作命令瞭,需要執行啟動容器的腳本即可!
docker容器化,在宿主機與容器映射的任何東西都是同一個,也就是不管修改瞭宿主機掛載容器的文件還是容器中修改瞭掛載的宿主機文件都會同時被修改。
到此這篇關於解決Jenkins集成docker插件問題的一些方法的文章就介紹到這瞭,更多相關Jenkins集成docker插件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- docker+gitlab+jenkins從零搭建自動化部署
- 關於Jenkins + Docker + ASP.NET Core自動化部署的問題(避免踩坑)
- 基於Docker、Nginx和Jenkins實現前端自動化部署
- Linux環境下使用Docker搭建Jenkins容器的方法步驟
- Gogs+Jenkins+Docker 自動化部署.NetCore的方法步驟