jenkins+springboot+docker 的可持续集成简易方案。
参考以下文章
jenkins+gitlab测试环境自动化部署
jenkins持续集成的步骤
安装docker 用来安装机器
搭建docker 私服
docker register私服
springboot项目docker化
springboot如何生成docker镜像
下面介绍如何利用jenkins部署springboot的docker容器
首先准备如下几步
- 安装docker 用来在目标机和jenkins上安装机器
2.搭建docker 私服 搭建 docker register私服
3.springboot项目docker化 springboot配置生成docker镜像
第四步完成后,在构建步骤里添加如下脚本
-
mvn package clean docker:build 命令打包docker文件到本地
-
docker push 命令将打包好的镜像推送到register
-
ssh到目标机 使用docker pull命令更新镜像,
4 使用docker stop命令停掉目标机服务,docker rm命令删除旧镜像(注意,此处要删除是因为都用的一个版本,可以每次打不同版本的镜像也可以)
- 使用docker run 命令启动容器
HOST_FILE=/data/code/scripts/hosts/****hosts
REMOTE_USER=git
ACTIVE_PROFILE=prod
MAVEN_OPTS="clean package -P${ACTIVE_PROFILE} -Dapi.version=${BRANCH} -Dmaven.test.skip=true docker:build"
PROJECT=projectName
DOCKER_IMAGE=docker.registry.XXX.com:5000/groupid/projectName
#https://yq.aliyun.com/ziliao/60417
OLD_BUILD_ID=$BUILD_ID
BUILD_ID=dontKillMe
SERVESR=($(awk '{print $1}' $HOST_FILE))
WS=`pwd`
function print_env() {
echo "MAVEN_OPTS:${MAVEN_OPTS}"
echo "ACTIVE_PROFILE:${ACTIVE_PROFILE}"
echo "OLD_BUILD_ID:${OLD_BUILD_ID}"
echo "BUILD_ID:${BUILD_ID}"
}
function build() {
echo "Building ..."
mvn ${MAVEN_OPTS}
echo "Building finished."
echo "Pushing to registry ..."
docker push ${DOCKER_IMAGE}
echo "Pushed to registry ..."
}
function install() {
echo "Dispacthing package to servers..."
for dest_server in ${SERVESR[@]}
do
echo "Dispacthing package to ${dest_server}"
ssh ${REMOTE_USER}@${dest_server} "
echo "Installing ${PROJECT} from docker registry "
sudo docker pull ${DOCKER_IMAGE}
mkdir -p /home/log/projectName
echo "Installed ${PROJECT} from docker registry "
"
done
}
function restart() {
for dest_server in ${SERVESR[@]}
do
ssh ${REMOTE_USER}@${dest_server} "
sudo docker stop ${PROJECT}
sudo docker rm ${PROJECT}
sudo docker run -d -p 9189:9189 -it -v /home/log/projectName:/home/log/projectName --restart=always --name ${PROJECT} docker.registry..com:5000/groupid/projectName
"
done
}
function main() {
if [ "true" == "${ONLY_RESTART}" ]; then
restart
else
print_env &&
build &&
install &&
restart
fi
}
main
网友评论