终于完工了,终于彻底的成功了,终于有一点点成效了,乘着还有点时间,记录一下,免得忘记。
一:环境
1、安装有docker的linux服务器(ip地址:17x.17.85.x)(如何安装?:Docker入门级操作:docker安装及下载镜像)、安装jenkins的服务器(ip地址:17x.16.81.x),githab,项目文件如图:
二、对项目的处理
1、在项目的启动项目xxx_war目录下的pom.xml文件中的
<build>
<plugins>
此处添加下面那段话
</plugins>
</build>
加入这一段:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<!-- 项目生成的镜像名称 -->
<imageName>${project.name}:${project.version}</imageName>
<!-- dockerfile的存放位置 -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<skipDockerBuild>false</skipDockerBuild>
<resources>
<resource>
<!-- 项目生成war包的的存放位置 -->
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2、在你的pom.xml文件所指的dockerDirectory,(dockerfile的存放位置)放一个Dockerfile文件,我的位置在这里:
dockerfile文件内容比较简单,主要取决于你的基础镜像的好坏,我的就很需要优化,哈哈
# dockerfile 基础配置
FROM 基础镜像
MAINTAINER 作者信息
# CI会在编译Docker镜像之前把编译产物拷贝到target目录下
COPY /target/*.war /opt/tomcat7/webapps/xxx.war
# configuration of java and tomcat ENV
ENV JAVA_HOME /opt/jdk
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /opt/tomcat7
ENV CATALINA_BASE /opt/tomcat7
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#设置启动命令
ENTRYPOINT ["/opt/tomcat7/bin/catalina.sh","run"]
3、在每一个pom.xml文件中添加下面文件,(解决jenkins使用maven编译时报乱码的错误)
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
项目的处理大致就是这些。其中特别注意的是dockerfile文件的位置和war位置需要注意。
三、对jenkins的处理
开始我按照网上各种方法都尝试了,但是我的知识实在有限,理解不了,想到这个方法是因为我一直在Xmanager工具里面操作docker所以才想到在jenkin里面使用ssh对安装有docker的服务器进行操作。所以感觉比较简单,我能够理解的方法。
1、首先公司jenkins已经安装在windows的服务器上了,并且安装了ssh和maven。
2、在安装jenkins的服务器上面添加环境变量(检查安装docker的环境看是否端口已开通:后面添加):
DOCKER_HOST tcp://xxx.xxx.xxx.xxx:2375
3、通过jenkins的可视化界面添加可远程控制装有docker 的服务器,单击系统管理--》系统设置--》SSH remote hosts中添加ssh相关信息,步骤如图:
3、创建新项目
1)在jenkins的可视化界面中点击新建--》添加项目名称--》构建一个自由风格的软件项目--》左下角点击OK步骤如图:
2)点击项目名称进入项目--》配置
1.添加项目描述等基础信息
2.源码管理:公司有svn也有用git,以git为示例。
3.构建
这里的每一个指令都要是正确的,一个地方错了,构建就不会成功。特别要注意空格、分号、名称对应等等小细节。
通过ssh对docker环境的控制,此处的判断是如果在docker环境中已经有此项目的容器正在运行,那么先停止容器,然后删除容器,再删除镜像,特别注意的是删除容器是rm,删除镜像是rmi。(:1.0.0-SNAPSHOT)双引号后面的是版本号。镜像名称应当和pom.xml将形成的镜像名称中的一致。
if docker ps -a|grep -i xxxget; then
docker stop xxxget;
docker rm xxxget;
docker rmi xxxget_war:1.0.0-SNAPSHOT;
fi
这个语句非常重要,将这个语句实现两个功能,一个cd xxx_war是将创建环境转换到启动项目下面(默认在jenkins创建的项目运行目录下,也就是testxxxfet下),第二mvn -am -amd 就是build项目的启动子项目以及与之相关联的子项目。大家需要修改的是启动子项目的名称。
cd xxxget_war && mvn -am -amd clean package docker:build
这个语句是启动项目镜像的容器,其中18080为docker对外的接口,可以根据需要修改,--name后面是你请动的容器的名称,后面是镜像名称,应当和pom.xml文件中生成的镜像名称一致,当jenkins运行到了这一步说明你的镜像已经打包成功了,你在你的docker环境下可以看到你的镜像(使用:
docker images
查看镜像)
docker run -it -d -p 18080:8080 --name xxxget xxxget_war:1.0.0-SNAPSHOT /bin/bash
4.构建后的操作:
这里是构建完成之后,jenkins给你邮箱发送构建信息。
到此你的jenkins配置基本完成了,你也可以在加上一些时间的限制,比如说,规定每天的某个时间自动构建一下项目等等。
4、启动项目的构建
配置完成之后回到项目,点击立即构建--》console output 你就可以在控制台看到构建的日志了,它会根据你的配置一步一步执行,当你其中一个步骤出错,构建会马上停止,所以尽量不要让自己的配置里面有错误指令。