解決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! 

推薦閱讀: