docker&Jkenkis&maven有待学习tool for work

springboot + jenkins + docker 自动

2018-09-27  本文已影响319人  JSM_SIMONS

前言:
本文面向的是有一定代码基础,对自动化部署有兴趣的同学,非新手向
如题所示,这个是一个spring boot 2.0 之后的一个架构的jenkins部署,跟以往的不一样的地方在于,用了maven的docker插件进行控制,本文中,会提到,关于docker中的一些版本控制的注意事项,已经jenkins脚本的编写方式

1.准备springboot代码项目
首先先准备一个springboot项目,可以正常启动的那种
本文以eureka为例
准备好后正式插入docker的配置信息
1.1 maven
在pom.xml的plugins标签下加入一个新的plugin

            <!-- Docker maven plugin -->
                    <plugin>
                            <groupId>com.spotify</groupId>
                            <artifactId>docker-maven-plugin</artifactId>
                            <version>1.0.0</version>
                            <executions>
                                <execution>
                                    <id>build-image</id>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>build</goal>
                                    </goals>
                                </execution>
                            </executions>
                            <configuration>
                                <!-- 镜像名称-->
                                <imageName>${project.artifactId}</imageName>
                                <!-- 镜像标签-->
                                <imageTags>
                                <!--可以指定多个标签    建议弄成自增序列或者时间戳类型,用于区分版本-->
                                <imageTag>${maven.build.timestamp}</imageTag>
                                </imageTags>
                                <baseImage>java</baseImage>
                                <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                                            <!-- dockerfile文件路径-->
                                <dockerDirectory>src/main/docker</dockerDirectory>
                                <resources>
                                    <resource>
                                            <targetPath>/</targetPath>
                                            <directory>${project.build.directory}</directory>
                                            <include>${project.build.finalName}.jar</include>
                                    </resource>
                                </resources>
                            </configuration>
                    </plugin>
                    <!-- Docker maven plugin -->

加入一个properties以控制tag时间格式

    <properties>
         <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
    </properties>

然后去到plugin中定义的dockerDirectory的路径创建一个Dockerfile的文件


1538034241(1).jpg

1.2
编写dockerfile文件,dockerfile文件是用于docker对jar包打包之后的操作的一个定义,熟悉docker的都应该很熟悉这个文件了
FROM 承载的镜像名称
VOLUME jar包的操作目录
ADD 需要上传到镜像中的文件
ENTRYPOINT 启动docker时需要运行的命令,就是说当docker启动容器就会自动执行
java -Djava.security.egd=file:/dev/./urandom -jar /simons-cloud-eureka.jar 这一语句
具体语法,请参照dockerfile文件的编写规则,这里就不班门弄斧了

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD simons-cloud-eureka.jar simons-cloud-eureka.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/simons-cloud-eureka.jar"]

成功之后把代码提交到git那么编写这方面就告一段落了

2.1 服务器上的操作
linux服务器上的操作
本文用的是vmware虚拟机做的演示
首先,打开虚拟机,已经对应的远程工具xshell

1538034870(1).jpg
因为docker的内核版本要求问题
本文为了尽量避免兼容问题
用的是centos7
安装软件的话,因为有很多的博客了,我就不赘述了,我贴出来大家去看就好
安装jdk https://blog.csdn.net/small_love/article/details/77394721
安装maven https://blog.csdn.net/vipbupafeng/article/details/80277126
安装git https://blog.csdn.net/javaee_sunny/article/details/80450153
安装jenkins https://blog.csdn.net/linjingke32/article/details/77799878
安装docker https://blog.csdn.net/kuqq2005/article/details/76359327
1538035300(1).jpg
检查所有软件的状态是否ok

2.2 操作jenkins
首先要到左手边,系统管理的全局工具配置选项里面,填写上面安装的git,maven,和jdk的路径


1538035866(1).jpg

配置完成之后就配置git的用户凭证,使jenkins可以通过用户密码调用git


1538036026(1).jpg
配置完成之后就可以进行新增项目

2.3
输入对应的jenkins的目录地址然后,新建项目


1538035497(1).jpg

项目新建玩之后,进入配置页面,把刚才写好的地址填进git里面


1538036342(1).jpg

填写git项目地址选好凭证
填写maven,以及配置maven之后要执行的脚本代码


1538036401(1).jpg

先执行maven的clean install命令进行依赖更新
然后 去到jenkins的WORKSPACE下的simons-cloud-eureka项目下,就是我们刚才新建的项目
然后执行这个项目下的start.sh的脚本


image.png

cd $WORKSPACE/simons-cloud-eureka
sh start.sh
因为在jenkins里面执行shell脚本的话,有很多奇奇怪怪的情况
所以我建议大家还是写一个脚本,然后在jenkins里面执行这个脚本
防止bug
我这边就把脚本贴出来

appName="simons-cloud-eureka"
word="1"
echo "$word"
word=`docker ps -a -q --no-trunc --filter name=^/"$appName"$`
echo "$word"
if [ -z "$word" ];
then
    echo "当前不存在该容器,直接进行启动该操作-------------------------------------"
elif [ -n "$word" ];
then
    echo "当前已存在容器,停止并移除该容器-------------------------------------"
    /usr/bin/docker stop "$word"
    /usr/bin/docker rm "$word"
elif [ "$word" == "1" ];
then
    echo "查询的信息有误,执行默认操作-------------------------------------"
    /usr/bin/docker stop "$word"
    /usr/bin/docker rm "$word"
fi
/usr/local/sbin/apache-maven-3.3.9/bin/mvn clean package -P spring-boot docker:build
/usr/bin/docker run -p 8761:8761 -d --name "$appName" "$appName":latest

那么我这边介绍一下shell的执行流程
首先先定义要启动的项目名称,就在dokcerfile里面我们写的要启动的项目名称,
建议是全部统一该项目的名称

docker ps -a -q --no-trunc --filter name=^/"appName" ----> 先统计当前正在运行的的容器中是否包含该项目的名称
当前不存在该容器,直接进行启动该操作
否则先/usr/bin/docker stop "word" 停止该容器 /usr/bin/docker rm "word" 然后删除该容器

1538037236(1).jpg

最后


1538037248(1).jpg

/usr/local/sbin/apache-maven-3.3.9/bin/mvn clean package -P spring-boot docker:build
使用maven打包springboot项目
然后
maven的docker-plugin 会把这个项目打包成jar包然后上传到本地镜像仓库中,然后启动该镜像

然后我们去检查一下docker的镜像仓库会发现,哎出现了一个latest和时间戳 tag的项目,因为docker默认最后一个版本为latest所以会出现两个,当新的时间戳版本生成时latest版本会被新的时间戳版本覆盖,所以我们启动的时候启动latest的容器即可

1538037364(1).jpg image.png

这个时候我们在浏览器里面,打开这个docker对应的eureka的控制页面

image.png

完美,打开了,那么这一篇博文就搞定咯
也欢迎大家的纠正,和留言
想要项目源码的也可以在下方留言,我会给你们git地址

上一篇 下一篇

猜你喜欢

热点阅读