记录下利用jenkins自动化构建中一些优化的东东

前言,不了解的可以去看下我之前的文章

之前在使用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
    
  • 服务端配置文件的放置

image-20210416163132619

image-20210416163156341

为什么这样能读取到配置呢,看下大佬写的博客,我就直接截图了,因为读取配置文件是有优先级的

image-20210416163424142

下一步准备解决前端的动态读取配置文件

Q.E.D.


一个热爱生活的95后精神小伙