1.安裝gitlab
詳情看:https://www.cnblogs.com/sanduzxcvbnm/p/13023373.html
安裝好gitlab后,然后創建一個普通用戶,編輯用戶,給用戶設置密碼,添加本機ssh密鑰到gitlab里,使用普通用戶上傳代碼
要使用git開頭的地址,不使用http開頭的地址
可以先把原有的遠程倉庫名稱修改成old_origin,然后添加這個新的遠程倉庫
2.安裝jenkins
詳情看:https://www.cnblogs.com/sanduzxcvbnm/p/11341622.html
修改清華大學jenkis地址,更新到最新版本,安裝一些插件:docker,gitlab,maven相關的
清華大學jenkis地址,插件管理-高級
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
3.安裝nexus
詳情看:
(1)安裝:https://www.cnblogs.com/sanduzxcvbnm/p/13098712.html
(2)配置docker鏡像倉庫:https://www.cnblogs.com/sanduzxcvbnm/p/13099635.html
4.配置jenkins
(1)新建item
輸入名稱,選擇第一個選項:自由風格,提交
(2)配置
(3)配置gitlab拉取代碼
(4)配置maven編譯打包
(5)配置docker
docker開啟遠程訪問:
# vim /lib/systemd/system/docker.service
# 在ExecStar開頭的這一行中添加上 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
或者是:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload
systemctl restart docker
jenkins->配置->cloud
(6)項目結構
(7)springcloud項目修改
在模塊的根目錄下創建一個Dockerfile文件,並且復制粘貼上啟動用的shell腳本(可以使用原來的,不過需要修改,去掉開頭的nohup,java命令使用相對路徑和最后的&)
不過這樣會有個問題,生成的日志是在容器中,只能登陸到容器中才能查看日志,無法通過使用命令docker logs 進行查看
docker logs
只能記錄輸出到終端的內容(stdout或者stderr),輸出到文件的無法顯示
(8)把容器中生成的日志文件掛載到宿主機上,方便統一管理
這里采用的是掛載數據卷的方式,不能采用掛載宿主機目錄的方式(會報要執行的shell腳本文件找不到的錯誤)
# 掛在宿主機目錄的方式,---不可行-----
[root@worker ~]# docker run -d -p 8761:8761 -v /var/log/eureka:/opt/hkd-cloud/hkd-eureka idocker.io/hkd-eureka:1.1
b2ccb868d4a8abc02999a0cdcec42268ab353fd8d8a0ae4b577ebf05795e1a41
[root@worker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@worker ~]# docker logs -f b2ccb868d4a8abc02999a0cdcec42268ab353fd8d8a0ae4b577ebf05795e1a41
/bin/sh: can't open 'hkd-eureka.sh': No such file or directory
[root@worker ~]# docker volume create my-vol # 創建數據卷,默認路徑:/var/lib/docker/volumes
[root@worker ~]# docker run -d -p 8761:8761 --mount source=my-vol,target=/opt/hkd-cloud/hkd-eureka idocker.io/hkd-eureka:1.1 # 可以掛載成只讀的文件,ro
d113c6d2db8ef5622e67cc612f2b106cfd3c9f050e83f935e35d4910f3d9c46b
[root@worker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d113c6d2db8e idocker.io/hkd-eureka:1.1 "/bin/sh hkd-eureka.…" 4 seconds ago Up 3 seconds 0.0.0.0:8761->8761/tcp charming_lamarr
[root@worker volumes]# pwd
/var/lib/docker/volumes
[root@worker volumes]# cd my-vol/
[root@worker my-vol]# ls
_data
[root@worker my-vol]# cd _data/
[root@worker _data]# ls
hkd-eureka-1.0.jar hkd-eureka.out hkd-eureka.sh
思考:
可以這樣處理:Dockerfile文件中VOLUME掛載到logs目錄,同時shell腳本中輸出日志到這個logs目錄中,運行容器掛載的時候這個目錄采用只讀的方式
docker run -d -p 8761:8761 -v my-vol:/opt/hkd-cloud/hkd-eureka/logs idocker.io/hkd-eureka:1.1
這樣一來,既能實現共享容器中的日志到宿主機,也增加了安全性