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
