本篇文章引導你使用Jenkins部署SpringBoot項目,同時使用Docker和Git實現簡單的持續集成和持續部署。java
拉取jenkins鏡像git
docker pull jenkins/jenkins
複製代碼
該鏡像爲最新版鏡像 jenkins非最新版 不少插件安裝不上spring
查看已經安裝的鏡像docker
docker images
複製代碼
運行鏡像shell
docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins/:/var/jenkins_home jenkins/jenkins
複製代碼
簡單解釋一下這個語句瀏覽器
運行docker ps
查看是否正常啓動springboot
[root@hyb ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e358a510dc5 jenkins/jenkins "/sbin/tini -- /us..." 5 weeks ago Up 33 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp myjenkins
複製代碼
若是未正常啓動多半是端口被佔用了,運行netstat -tunlp|grep 8080
便可檢查端口占用狀況bash
接下來打開瀏覽器訪問 你的ip:8080 便可看到jenkins的安裝界面,若是看不到的話檢查服務器防火牆設置服務器
首次運行時須要你輸入一個密碼,打開映射的路徑下的secrets/initialAdminPassword,例如 /var/jenkins/secrets/initialAdminPassword微信
輸入密碼後會看到安裝插件的頁面
選擇第一個默認安裝安裝完成後建立管理員,填寫完成提交便可
至此, jenkins已經安裝完畢啦
在項目的根目錄中新建一個文件 名稱爲Dockerfile ,填入如下內容
FROM java:8
VOLUME /tmp
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD service.jar /usr/share/myservice/myservice.jar
RUN bash -c 'touch /usr/share/myservice/myservice.jar'
ADD arthas-boot.jar /arthas-boot.jar
ENTRYPOINT java -Xms512m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -jar /usr/share/myservice/myservice.jar
EXPOSE 8088
複製代碼
對jdk 配置的修改能夠自行修改
首頁 -> 點擊系統管理 -> 管理插件 ->可選插件 -> 過濾:ssh -> 選擇Publish Over SSH插件,點擊直接安裝
jenkins首頁,系統管理 -> 系統設置 -> 下拉,找到Publish over SSH 點擊新增
點擊高級->選擇Use password authentication,or use a different key 輸入密碼或者輸入祕鑰
點擊保存退出
首頁點擊新建任務
輸入任務名稱,選擇構建一個maven項目
在general中選擇丟棄舊的構建以節省磁盤資源
在源碼管理中選擇git配置好git地址和密碼
在構建環境中指定根pom.xml文件,而且寫好maven打包命令
在post steps中選擇Run only if build succeeds, 意爲在編譯成功後執行腳本在add post build step 中選擇執行shell 執行sh腳本
該腳本的做用爲發送打包好的jar文件到遠程服務器,咱們採用rsync 工具來傳輸,該工具對jar包有特殊支持,沒必要每次傳輸全部文件,遠程對比文件來增量替換jar文件,前提是在容器中跟遠程服務器有ssh免密登錄的權限,而且容器中與目標機器必須都安裝了rsync 該工具能夠採用apt-get 或者yum直接安裝,在腳本中添加rsync -av /var/jenkins_home/workspace/你的項目路徑/test*.jar 你的用戶名@你的IP:/tmp/test/service.jar
複製代碼
修改本行命令中爲對應的jar包地址和對應服務器的放置地址
ps:在容器中使用rsync時,須要在容器中生成ssh祕鑰,遠程鏈接而不是宿主機
進入容器的命令爲docker exec -it 容器名 bash
ssh 免密登錄操做步驟:
1.ssh-keygen
一直回車
2.ssh-copy-id 用戶名@ip
輸入yes以後輸密碼就行了
在構建後操做中選擇send build artifacts over ssh 意爲向遠程服務器發送文件並執行命令
選擇以前填寫好的服務器,sourcefiles填寫**/DockerFile remote directory 即爲遠程發送過去的文件地址
execCommand中輸入如下腳本:
#!/bin
# DockerFile和jar包所在的文件夾
DOCKER_FILE_BASE_PATH=
# 修改jar包名稱統一改成service.jar
mv $DOCKER_FILE_BASE_PATH/*.jar $DOCKER_FILE_BASE_PATH/service.jar
# 應用名稱,也爲容器名稱
APPLICATION_NAME=
# 鏡像名稱
IMAGE_NAME=$APPLICATION_NAME:latest
# 中止並刪除舊的容器
set -e; docker stop $APPLICATION_NAME && docker rm $APPLICATION_NAME || EXIT_CODE=$? && true;
#刪除舊的鏡像
set -e; docker rmi $IMAGE_NAME || EXIT_CODE=$? && true;
#構建鏡像
docker build -t $IMAGE_NAME $DOCKER_FILE_BASE_PATH
#運行容器
docker run --name $APPLICATION_NAME -e "SPRING_PROFILES_ACTIVE=test" -d -p 8085:8088 -p 10009:10009 $IMAGE_NAME
複製代碼
點擊保存,而後左上點擊當即構建
點擊下面的buildhistory中正在構建的一個
點擊控制檯輸出,便可查看構建日誌,至此整套自動化部署已徹底完成
有興趣能夠關注個人我的微信公衆號,會按期推送關於Java的技術文章,並且目前不恰飯都是乾貨哈哈哈哈