1先讲一下大概原理,本地提交代码到gitlab,然后触发webhook,自动去下载代码到jenkins,jenkins通过publish over ssh插件把文件复制到远程服务器上,(有人会问为什么不通过jenkins构建maven工程,因为作者的jenkins是通过docker生成的,里面会有推送镜像到远程镜像仓库会失败)远程服务器上安装maven,并配置maven,生成镜像,运行镜像。(总结感觉比较鸡肋,没有我上一遍通过jenkins构建的简单)
2.先去修改我们工程的POM.xml文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>danbing2226/dockerfilemavenplugins</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
danbing2226/dockerfilemavenplugins这个标签是你的dockerhub上的目录
因为这个插件除了构建镜像还可以推送镜像到dockerhub(或者你自己的仓库)
true这个标签是添加dockerhub的认证,一会在maven的settings.xml里面会说。
添加Dockfile文件和pom.xml一个目录
FROM java:8
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
settings.xml配置文件
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
<servers>
<id>docker.io</id>
<username>danbing2226</username>
<password>XXXXXXXX</password>
</server>
</servers>
这个是你dockerhub上的用户名和密码。
远程docker机器开启TCP管理端口
vim /usr/lib/systemd/system/docker.service
加上
-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
这是centos上的配置,你想在windows上打包成功的话就设置一个环节变量
记住:::你打包的时候用cmd命令,mvn clean … 不要在开发工具idea上,不然会构建不成功。
关闭防火墙查看端口
systemctl daemon-reload
systemctl restart docker
netstat -an | grep 2375
如果出现启动失败的话执行以下
关闭selinux和防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled
systemctl start docker
接下来是jenkins的配置
新建一个普通工程
#!/bin/bash
cd /home/dockerfilemavenplugins
echo "文件目录"
ls -l
echo "文件目录"
export JAVA_HOME=/usr/java/jdk1.8.0_251
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
echo $PATH
echo $JAVA_HOME
whoami
echo "打包构筑镜像这也是唯一的好处,不用自己去再复制dockerfile了"
mvn clean -Dmaven.test.skip=true -Ptest package -Ddockerfile.push.skip -Ddockerfile.tag.skip
MICROSERVICE="microservice-provider-dockerfilemavenplugins"
echo "通过命令获取POM.xml文件中的版本信息"
version=$(echo $(awk '/<\/*version\/*>/{gsub(/[[:space:]]*<\/*version\/*>/,"");print $0}' pom.xml) | awk '{print $2}')
echo "通过命令获取POM.xml文件中的镜像名称"
name=$(awk '/<\/*repository\/*>/{gsub(/[[:space:]]*<\/*repository\/*>/,"");print $0}' pom.xml)
image=$(echo $name":"$version)
startflag=$(docker inspect --format '{{.State.Running}}' "$MICROSERVICE")
exit=$(docker ps |grep "$MICROSERVICE")
echo “工程名称”
echo $MICROSERVICE
echo “容器是否运行状态”
echo $startflag
echo "镜像名称"
echo $image
start(){
echo "容器已经存在,删除容器"
docker rm -f "$MICROSERVICE"
echo "删除容器成功"
echo "删除后创建容器"
docker run --name "$MICROSERVICE" --restart=always -d -p 8192:8092 "$image"
echo "容器创建完成端口号8192"
}
echo "开始启动"
if [ "$exit" == "" ];then
echo "没有容器,新建容器"
docker run --name "$MICROSERVICE" --restart=always -d -p 8192:8092 "$image"
echo "第一次容器创建完成端口号8192"
else
echo "容器存在"
start
fi
echo “启动结束”
docker ps -a
docker run --name microservice-provider --restart=always -d -p 8192:8092 "$image"
docker ps -a
echo "删除未用镜像节省空间"
docker rmi -f `docker images -a | grep '<none>' | awk '{print $3}'`
echo "运行成功"
命令有些多,你认证看的话,能学到很多东西
下面是验证
来自李大厨的鸡汤:
不是每个搞笑的人都很开心的。