记录下利用jenkins自动化构建中一些优化的东东
前言,不了解的可以去看下我之前的文章
- 利用jenkins自动构建springcloud项目一
- 利用jenkins自动构建springcloud项目二
之前在使用jenkins构建的时候必须在本地把环境变量改成服务器端的地址,修改的次数多了,感觉很啰嗦,于是琢磨着怎么动态选择环境,刚好也看了蘑菇大佬的DockerCompose一键部署蘑菇博客(Nacos版),jar包启动时指定环境。但感觉自己的部署方式不太适合用dockerCompose,因为我部署jenkins的服务器和部署博客的项目不在同一台服务器,又因为我每个服务的镜像比较大(700-800M),每次push到阿里云容器仓库很费时,部署服务的服务器还要再拉取,无形中增加了时间成本,所以还是选择让jenkins将构建好的jar包直接发送给要部署服务的服务器(jar包才100多M),下面上我的成果
改变的就是Dockerfile和Jenkinsfile还有事先将生产环境的配置文件放置到要部署服务的服务器
- Dockerfile文件
from java:8
## 设置挂载点
VOLUME /tmp
## 复制并修改重命名
ADD mogu_picture-0.0.1-SNAPSHOT.jar picture.jar
#复制配置文件到容器的/config目录下
ADD ./config /config
#
WORKDIR /home/mogu_blog/picture
# 运行jar包
RUN bash -c 'touch /picture.jar'
#指定配置文件/config/***.yml,因为上面第三步将本地配置文件放到了容器的/config中
#指定jvm参数
ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","-Djava.security.egd=file:/dev/./urandom","-Dspring.config.location=/config/application.yml,/config/bootstrap.yml","/picture.jar"]
- Jenkinsfile,其实没啥改动,就是将上次部署之后清空文件夹的命令去掉了
#!/bin/sh
NUM_1=`docker ps -a | grep picture | grep -vi grep |wc -l`
echo "容器是否存活:******************"${NUM_1}"******************"
NUM_2=`docker images | grep picture | grep -v grep | wc -l`
echo "镜像是否存在:******************"${NUM_2}"******************"
if [[ "${NUM_2}"!="0" ]];then
echo "---------镜像存在!!!,判断容器是否存活-----------"
if [[ "${NUM_1}"!="0" ]];then
echo "---------容器存活,停止容器并删除容器---------"
docker stop picture
docker rm picture
fi
echo "--------删除镜像---------"
docker rmi picture
fi
echo "----------开始构建镜像......--------------"
docker build -t picture /home/mogu_blog/picture/
echo "---------运行容器------------"
docker run -dit --name picture -p 8602:8602 picture:latest
- 服务端配置文件的放置
为什么这样能读取到配置呢,看下大佬写的博客,我就直接截图了,因为读取配置文件是有优先级的
下一步准备解决前端的动态读取配置文件