jenkins+docker實現自動編譯、打包、構建鏡像、容器部署


https://blog.csdn.net/xiaoxiangzi520/article/details/88842200

一、整個持續集成、自動部署流程

 

開發push代碼到gitlab,觸發jenkins自動pull代碼,通過maven編譯、打包,然后通過執行shell腳本使docker構建鏡像並push到私服(或者阿里雲)倉庫,此操作完成后jenkins服務器上再執行SSH命令登錄到部署服務器,docker從倉庫(私服)拉取鏡像,啟動容器。整個操作流程完成。

二、服務器軟件環境配置

 由於條件所限,故只用兩台機器作為搭建環境。

三、jenkins配置

 3.1 安裝插件

 

 

SSH:用於SSH遠程Docker主機執行Shell命令

3.2 添加SSH遠程主機

添加訪問的憑據:

 

系統管理-系統配置


 

3.3 開啟Docker Remote API

在192.168.1.121上執行:

vim /lib/systemd/system/docker.service


重新加載配置文件

systemctl daemon-reload
systemctl restart docker
開啟防火牆的端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=2375/tcp
3.4 docker 配置

系統管理-系統設置-雲  新增

 

四、部署私有鏡像倉庫 

Docker Hub作為Docker默認官方公共鏡像;如果想自己搭建私有鏡像倉庫,官方也提供registry鏡像,使得搭建私有倉庫非常簡單。
在192.168.1.121部署:

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
接下來測試registry可用性。

為了更快的獲取鏡像,這里使用了阿里雲的鏡像加速器。
由於Docker CLI客戶端默認以HTTPS訪問,而部署的registry並未提供HTTPS,因此,需要在pull鏡像的Docker主機(192.168.1.237,192.168.1.121)添加HTTP可信任: 

vi /etc/docker/daemon.json


五、構建Tomcat基礎鏡像

vim Dockerfile
添加如下內容: 

FROM centos:7
MAINTAINER www.aliangedu.com

ENV VERSION=8.5.39
ENV JAVA_HOME /usr/local/jdk

RUN yum install wget -y

RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/*

EXPOSE 8080
CMD ["catalina.sh", "run"]
 構建鏡像並push到192.168.1.121倉庫:

docker build -t 192.168.1.121:5000/hxkg-tomcat-8.5 .
docker push 192.168.1.121:5000/hxkg-tomcat-8.5
六、新建任務

任務配置

 

 

 

在Jenkins本機服務器(192.168.1.237)構建鏡像並推送到鏡像倉庫(192.168.1.121),並SSH遠程連接到Docker主機(192.168.1.121,這里可以新增一台單獨的服務器來拉取倉庫中的鏡像)

使用推送的鏡像創建容器:

 

獲取倉庫中構建的tomcat鏡像,基於此鏡像將編譯打包后的war包拷貝到tomcat webapps目錄,構建鏡像並推送192.168.1.121倉庫。

 

上圖中,在Jenkins主機執行的Shell命令如下: 

REPOSITORY=192.168.1.121:5000/zpzc
# 構建鏡像
cat > Dockerfile << EOF
FROM 192.168.1.121:5000/hxkg-tomcat-8.5:latest
RUN rm -rf /usr/local/tomcat/webapps/*.war
COPY target/*.war /usr/local/tomcat/webapps
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
# 上傳鏡像
docker push $REPOSITORY
鏡像構建完成后, 使用ssh遠程登錄部署服務器(192.168.1.121)上刪除已經存在的容器和拉取的部署鏡像,重新部署新的容器。

 

上圖中,SSH遠程Docker主機執行的Shell命令如下:

REPOSITORY=192.168.1.121:5000/zpzc
# 部署
docker rm -f zpzc
docker rmi $REPOSITORY
docker run -d --name zpzc -p 28888:8080 -v /usr/java/jdk1.8.0_171:/usr/local/jdk $REPOSITORY
 注意,此處需要在部署服務器上安裝jdk環境,掛載jdk目錄到容器中,因為tomcat鏡像文件Dockerfile沒有配置jdk環境:

 

七、構建任務

 執行日志:

 

 

八、測試

在192.168.1.121上查看鏡像:

 

查看容器:

 postman接口測試:

 

九、遇到的異常

1.

解決:在192.168.1.237上執行 sudo gpasswd -a jenkins root;sudo service jenkins restart。將jenkins用戶加入到root用戶組中獲取管理員權限。詳見:https://www.cnblogs.com/informatics/p/8276172.html。

2.

 

解決: 這個問題可能是由於客戶端采用https,docker registry未采用https服務所致。一種處理方式是把客戶對地址“192.168.1.121:5000”請求改為http。在”/etc/docker/“目錄下,創建”daemon.json“文件。在文件中寫入:{ "insecure-registries":["192.168.1.121:5000"] }   詳見:https://www.cnblogs.com/hobinly/p/6110624.html

3.

解決:這是因為我在jenkins配置shell腳本的時候沒有寫全路徑導致找不到tomcat catalina.sh腳本。

改為:
————————————————
版權聲明:本文為CSDN博主「FinelyYang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoxiangzi520/java/article/details/88842200


免責聲明!

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



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