jenkins+Docker+springcloud微服务持续集成
流程說明
本地部署
微服務是可以獨立部署的,如果不借助spring-boot-maven插件,package出來的jar包是不能運行的。
借助spring-boot-maven插件package出來的jar包已經內嵌了tomcat相關的jar,可以獨立運行(java -jar):
使用Dockerfile制作微服務鏡像
vi Dockerfile
- –build-arg JAR_FILE=xxx 設置參數的值
- eureka:v1:eureka是鏡像名稱,v1是標簽tag
docker build日志查看:
docker run創建容器驗證一下:
docker logs -f 容器ID查看容器日志
Harbor
簡介
安裝
創建用戶和項目
給tensquare項目添加成員:
上傳鏡像到Harbor
由于docker并不信任harbor倉庫地址,貿然上傳到harbor會報錯:
vi /etc/docker/daemon.json 信任harbor倉庫地址
systemctl restart docker 重啟docker
上傳到私有倉庫,需要賬號密碼:不然會報錯
所以需要登錄harbor:
此時就會成功push:
查看harbor倉庫,就會看到剛才上傳的eureka鏡像:
從harbor下載鏡像
docker images
spring cloud微服務持續集成
代碼上傳到gitlab
idea vcs
enable
git
add
commit
remotes
push
TortoiseGit操作方式
init
commit
push
remote
從gitlab拉取項目源碼
在項目根目錄創建Jenkinsfile腳本文件:
jenkins操作:創建pipeline
將分支設計成參數接收,更靈活:
腳本中的變量設計:
" "雙引號引用變量:
提交Jenkinsfile腳本文件:
Build With Parameters
構建完畢后代碼成功pull:
提交到SonarQube代碼審查
報錯:
注釋這行:
package各個子項目進行
mvn install失敗
因為common工程不是一個標準的spring cloud微服務工程,找不到啟動類main class而報錯。
因此不能在parent工程中引入spring-boot-maven插件,而是在需要該插件的子工程中分別引入。
再次構建,就已經安裝到本地倉庫了:
mvn clean package
使用${project_name}來獲取當前工程的名稱
package zuul時報錯:
找不到parent父工程
需手動上傳parent的pom文件到服務器的倉庫相應目錄下:
使用Dockerfile編譯、生成鏡像
dockerfile-maven-plugin插件可以讀取每個工程中的Dockerfile文件自動構建鏡像
tensquare_eureka_server工程
使用dockerfile-maven-plugin插件調用Dockerfile腳本文件生成鏡像:
在Jenkinsfile腳本中觸發dockerfile-maven-plugin插件的執行:
構建完畢后會生成eureka工程的鏡像:
每個子工程都需要添加Dockerfile腳本文件和在pom.xml中添加dockerfile-maven-plugin插件:
上傳鏡像到harbor鏡像倉庫
定義鏡像的標簽(版本號):
定義harbor的URL地址:
定義harbor的項目名稱:
上傳到harbor是需要login的,賬號密碼寫在Jenkinsfile腳本中就會暴露給所有開發人員,所以應該在jenkins的憑據中添加harbor的賬號密碼:
點擊賬號進入會看到自動生成的ID:
在Jenkinsfile腳本中定義harbor的登錄憑證ID:
在流水線語法中選擇:
對生成的腳本代碼進行變量替換(可選):
提交push腳本。
jenkins構建日志:
登錄harbor倉庫查看push的鏡像:
從harbor拉取鏡像和發布應用
jenkins安裝Publish Over SSH插件
配置101ssh免密登錄到103
生成遠程執行命令腳本:
總結
以上是生活随笔為你收集整理的jenkins+Docker+springcloud微服务持续集成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jenkins pipeline、用户权
- 下一篇: k8s StatefulSet