自動(dòng)化Gradle項(xiàng)目打包并Docker部署

一、對(duì)項(xiàng)目進(jìn)行容器化

在項(xiàng)目的根目錄下新建一個(gè)名為 Dockerfile 的文件來(lái)定義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 繼承而來(lái)的
2、VOLUME /tmp 表示掛載了 /tmp 目錄到容器中,此目錄為 Spring Boot 為 tomcat 創(chuàng)建的默認(rèn)目錄。
3、ADD mocksite-1.0.0.jar mocksite.jar 表示從目錄中把 mocksite-1.0.0.jar 包添加到鏡像中,并重命名mocksite.jar
這步做的目的,會(huì)在下一段中說(shuō)明
4、ENTRYPOINT 在容器啟動(dòng)后執(zhí)行 java 命令來(lái)運(yùn)行程序

二、修改build.gradle

1、在buildscript.dependencies節(jié)點(diǎn)中,加入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 方法,主要是把通過(guò) jar 任務(wù)生成的歸檔文件拷貝到 stageDir 目錄下
可以通過(guò)執(zhí)行g(shù)radle buildDocker命令來(lái)生成 Docker 鏡像

三、push到鏡像倉(cāng)庫(kù)并完成部署

定義一個(gè)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}

#登錄到遠(yuǎn)程服務(wù)器
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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容