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

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

作者: BestFei | 来源:发表于2019-11-04 15:16 被阅读0次
一、对项目进行容器化

在项目的根目录下新建一个名为 Dockerfile 的文件来定义Docker的镜像层

FROM openjdk:8-jdk-alpine
MAINTAINER yong.fei <best.fei@good.com>
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VOLUME /tmp
ADD mocksite-1.0.0.jar mocksite.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/mocksite.jar"]

脚本解析
1、FROM openjdk:8-jdk-alpine 表示镜像是从 openjdk:8-jdk-alpin 继承而来的
2、VOLUME /tmp 表示挂载了 /tmp 目录到容器中,此目录为 Spring Boot 为 tomcat 创建的默认目录。
3、ADD mocksite-1.0.0.jar mocksite.jar 表示从目录中把 mocksite-1.0.0.jar 包添加到镜像中,并重命名mocksite.jar
这步做的目的,会在下一段中说明
4、ENTRYPOINT 在容器启动后执行 java 命令来运行程序

二、修改build.gradle

1、在buildscript.dependencies节点中,加入classpath('se.transmode.gradle:gradle-docker:1.2')
2、新增 apply plugin: 'docker'
3、新增

jar {
    baseName = 'mocksite'
    version = '1.0.0'
}

task buildDocker(type: Docker, dependsOn: build) {
    applicationName = jar.baseName
    tagVersion = "latest"
    dockerfile = file('Dockerfile')
    doFirst {
        copy {
            from jar
            into stageDir
        }
    }
}

这里的jar定义,表示打出名为mocksite-1.0.0.jar的包
添加了 doFirst 方法,主要是把通过 jar 任务生成的归档文件拷贝到 stageDir 目录下
可以通过执行gradle buildDocker命令来生成 Docker 镜像

三、push到镜像仓库并完成部署

定义一个shell文件

#!/bin/bash

set -e
gradle clean build buildDocker -x test  --info

docker_username=best.fei
docker_pwd=dockerAccountPwd

docker_project=qa/mocksite
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}
#push latest分支
#docker tag ${docker_image} ${docker_server_addr}/${docker_image}
#docker push ${docker_server_addr}/${docker_image}
#push 指定tag分支
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 -i /Users/feiyong/.ssh/user-rsa << 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}
#更新部署latest分支
#docker pull ${docker_server_addr}/${docker_image}
#docker run -p 8848:8080 -d --name mocksite ${docker_server_addr}/${docker_image}
#更新部署指定tag分支
docker pull ${docker_server_addr}/${docker_project}:${docker_tag}
docker run -p 8848:8080 -d --name mocksiteph3 ${docker_server_addr}${docker_project}:${docker_tag}

exit
eeooff

相关文章

网友评论

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

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