美文网首页
自动化Maven项目打包并Docker部署

自动化Maven项目打包并Docker部署

作者: BestFei | 来源:发表于2019-11-05 11:16 被阅读0次

    一、对项目进行容器化
    在项目的根目录下新建一个名为 Dockerfile 的文件来定义Docker的镜像层

    FROM openjdk:8-jdk-alpine
    MAINTAINER best.fei <best.fei@good.com>
    VOLUME /tmp
    ADD remocker-0.0.1-SNAPSHOT.jar /ReMocker.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/ReMocker.jar"]
    

    脚本解析
    1、FROM openjdk:8-jdk-alpine 表示镜像是从 openjdk:8-jdk-alpin 继承而来的
    2、VOLUME /tmp 表示挂载了 /tmp 目录到容器中,此目录为 Spring Boot 为 tomcat 创建的默认目录。
    3、remocker-0.0.1-SNAPSHOT.jar /ReMocker.jar 表示从目录中把 remocker-0.0.1-SNAPSHOT.jar 包添加到镜像中,并重命名 ReMocker.jar
    这步做的目的,会在下一段中说明
    打出包的名称之所以叫remocker-0.0.1-SNAPSHOT.jar,是因为在pom.xml有如下配置

    <artifactId>remocker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    

    4、ENTRYPOINT 在容器启动后执行 java 命令来运行程序

    二、修改pom.xml
    1、properties节点增加docker.image.prefix

    <properties>
        <docker.image.prefix>qa</docker.image.prefix>
    </properties>
    

    2、增加docker build插件

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.1.1</version>
        <configuration>
          <imageName>${docker.image.prefix}/${project.artifactId}:latest</imageName>
          <dockerDirectory>${project.basedir}/</dockerDirectory>
          <resources>
            <resource>
            <targetPath>/</targetPath>
            <directory>${project.build.directory}</directory>
            <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
    </plugin>
    

    三、最后编写shell脚本
    完成自动编译 部署

    #!/bin/bash
    set -e
    ./mvnw clean package docker:build
    
    docker_username=best.fei
    docker_pwd=dockerPwd
    
    docker_project=qa/remocker
    docker_server_addr=harbor.best.fei.com
    docker_tag=v1_0_0
    docker_image=${docker_project}:latest
    
    docker login -u${docker_username} -p${docker_pwd} ${docker_server_addr}
    docker tag ${docker_image} ${docker_server_addr}/${docker_project}:${docker_tag}
    docker push ${docker_server_addr}/${docker_project}:${docker_tag}
    
    sshpass ssh bestfei@18.18.18.18 << eeooff
    
    echo "========= docker stop ========="
    docker ps -a  | grep "${docker_server_addr}/${docker_project}" | awk '{print \$1}'|xargs docker stop
    echo "========= docker rm ========="
    docker ps -a  | grep "${docker_server_addr}/${docker_project}" | awk '{print \$1}'|xargs docker rm
    echo "========= docker rmi ========="
    docker images | grep "${docker_server_addr}/${docker_project}"|awk '{print \$3}'|xargs docker rmi
    
    docker login -u${docker_username} -p${docker_pwd} ${docker_server_addr}
    docker pull ${docker_server_addr}/${docker_image}
    docker run -p 8818:8080 -d --name remocker ${docker_server_addr}/${docker_image}
    
    exit
    eeooff
    

    相关文章

      网友评论

          本文标题:自动化Maven项目打包并Docker部署

          本文链接:https://www.haomeiwen.com/subject/tnjsbctx.html