Jenkins集成docker插件build&publish,它究竟是如何完成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操作命令了,需要執行啓動容器的腳本即可!

 

tips:docker容器化,在宿主機與容器映射的任何東西都是同一個,也就是不管修改了宿主機掛載容器的文件還是容器中修改了掛載的宿主機文件都會同時被修改。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章