Jenkins+docker發(fā)布Springbot服務(wù)的實(shí)現(xiàn)
一.開發(fā)Springbot應(yīng)用
新建多個(gè)環(huán)境的配置文件

bootstrap.yaml

通過變量獲取不同環(huán)境active
bootstrap-dev.yml

bootstrap-pre.yaml

預(yù)發(fā)布及生產(chǎn)環(huán)境配置文件走nacos
二.配置docker
新增Dockerfile文件

Dockerfile內(nèi)容
# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基礎(chǔ)鏡像使用java
FROM openjdk:8
# 作者
MAINTAINER qql <xxx@qq.com>
# VOLUME 指定了臨時(shí)文件目錄為/tmp。
# 其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個(gè)臨時(shí)文件,并鏈接到容器的/tmp
VOLUME /tmp
# 設(shè)置時(shí)區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 將jar包添加到容器中并更名為app.jar
ARG JAR_FILE
ADD target/cdc-0.0.1-SNAPSHOT.jar /app.jar #替換成你項(xiàng)目打包后的文件名稱
#配置項(xiàng)目端口
EXPOSE 8020
# 運(yùn)行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=${env}"] #通過變量傳遞不同的環(huán)境在服務(wù)器項(xiàng)目下新增docker-composer.yaml文件 ,不要放在代碼版本庫(kù)
version: '3'
services:
project-demo:
container_name: cdcd-demo #自定義容器名稱
image: qql/cdcd:0.0.1 #鏡像名稱
restart: always
environment:
env: dev #環(huán)境,不同環(huán)境使用不同環(huán)境名稱
volumes:
# 同步時(shí)間
- /etc/localtime:/etc/localtime:ro
# 如果項(xiàng)目有些日志或者寫文件,需要同步到宿主機(jī)器,也需要定義相應(yīng)的卷
# - ./data:/etc/project-demo/data
# - ./log:/etc/project-demo/log
ports:
- 8080:8020三.配置Jenkins



新增部署shell腳本

#!/bin/bash
echo "當(dāng)前位置"
pwd
mvn clean package -Dmaven.test.skip=true
#切換到項(xiàng)目目錄
cd cdc
pwd
#獲取最新版本tag
LatestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
echo -e "最新版本tag......"
echo -e "$LatestTag"
echo -e "鏡像地址"
#獲取本機(jī)IP
local_ip=`ifconfig eth0 | grep 'inet' | awk '{print $2}' | sed -e "s/addr\://"`
echo ${local_ip}
#制作docker鏡像
docker build -f Dockerfile -t qql/cdc:1.0 .
echo "制作成功"
cd ../docker
pwd
#根據(jù)docker-composer.yaml文件新建獲取重新構(gòu)建docker容器
docker-compose -f docker-composer.yaml -p cdc up -d
step=1 #間隔的秒數(shù),不能大于60
content=""
for (( i = 0; i < 60; i=(i+step) )); do
status_code=$(curl -I -m 10 -o /dev/null -s -w %{http_code} 127.0.0.1:8080/index/index) #訪問服務(wù)一個(gè)接口驗(yàn)證容器是否啟動(dòng)
echo $status_code
if [ $status_code != 200 ]; then
sleep $step
echo "服務(wù)還沒有啟動(dòng),耗時(shí)"$i"秒"
else
echo "服務(wù)已經(jīng)啟動(dòng),耗時(shí)"$i"秒"
break
fi
if [ $i == 59 ]; then
echo "啟動(dòng)失敗"
exit -1
fi
done
{
docker rmi `docker images | grep none | awk '{print $3}'` && /
} || {
echo 'delete null images error(不需要處理)'
}保存,則就可以執(zhí)行部署


到此這篇關(guān)于Jenkins+docker發(fā)布Springbot服務(wù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Jenkins+docker發(fā)布Springbot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker啟動(dòng)鏡像失敗后如何用日志logs查找失敗原因及解決
在使用docker的時(shí)候,在某些未知的情況下可能啟動(dòng)了容器,但是過了沒幾秒容器自動(dòng)退出了,這個(gè)時(shí)候如何排查問題呢?下面這篇文章主要給大家介紹了關(guān)于docker啟動(dòng)鏡像失敗后如何用日志logs查找失敗原因及解決的相關(guān)資料,需要的朋友可以參考下2023-05-05
Docker+keepalived+nginx實(shí)現(xiàn)主從熱備的方法示例
這篇文章主要介紹了Docker+keepalived+nginx實(shí)現(xiàn)主從熱備的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問題
這篇文章主要介紹了解決docker安裝完成報(bào):bridge-nf-call-iptables is disabled問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-11-11
docker環(huán)境中websocket?通過nginx代理不通解決方案
這篇文章主要介紹了docker環(huán)境中websocket?通過nginx代理不通解決方案,下面是一些可能會(huì)導(dǎo)致?WebSocket?代理失敗的問題以及相應(yīng)的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Ubuntu?環(huán)境下安裝?Docker環(huán)境詳解
這篇文章主要介紹了Ubuntu?環(huán)境下安裝?Docker環(huán)境詳解的相關(guān)資料,需要的朋友可以參考下2022-10-10
基于alpine用dockerfile創(chuàng)建的爬蟲Scrapy鏡像的實(shí)現(xiàn)
這篇文章主要介紹了基于alpine用dockerfile創(chuàng)建的爬蟲Scrapy鏡像的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-12-12

