提交 8bf8a90b 作者: yanxin

容器化部署配置

上级 1d991e5f
......@@ -25,7 +25,6 @@ target/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
......
FROM swr.cn-southwest-2.myhuaweicloud.com/wd/maven:3.6.1-jdk-8-alpine AS builder
USER root
WORKDIR /workspace
COPY . .
RUN mvn clean install -DskipTests
FROM swr.cn-southwest-2.myhuaweicloud.com/wd/openjdk:8-jdk-alpine3.9
MAINTAINER lixingyu
USER root
WORKDIR /workspace
COPY --from=builder /workspace/target/*.jar /workspace/app.jar
ARG ENV_NAME
ARG PORT
ARG NACOS_SERVER
ARG NACOS_USERNAME
ARG NACOS_PASSWORD
ARG NACOS_LOCAL_IP
ENV APP_OPTS1="-Dspring.profiles.active=${ENV_NAME}"
ENV APP_OPTS2="-Djasypt.encryptor.password=1@wdLkj90#chMsdzxA%2024"
ENV APP_OPTS3="-Dfile.encoding=utf-8"
ENV APP_OPTS4="-Duser.timezone=Asia/Shanghai"
ENV APP_OPTS5="-Dspring.cloud.nacos.discovery.server-addr=${NACOS_SERVER}"
ENV APP_OPTS6="-Dspring.cloud.nacos.discovery.ip=${NACOS_LOCAL_IP}"
ENV APP_OPTS7="-Dspring.cloud.nacos.config.server-addr=${NACOS_SERVER}"
ENV APP_OPTS8="-Dspring.cloud.nacos.config.username=${NACOS_USERNAME}"
ENV APP_OPTS9="-Dspring.cloud.nacos.config.password=${NACOS_PASSWORD}"
ENV APP_OPTS10="-Dserver.port=${PORT}"
ENV JVM_OPTS="-Xmx2024M -Xms256M"
EXPOSE ${PORT}
# 解决导出字体缺失报错问题
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --update ttf-dejavu fontconfig
ENTRYPOINT ["sh","-c","java $JVM_OPTS $APP_OPTS1 $APP_OPTS2 $APP_OPTS3 $APP_OPTS4 $APP_OPTS5 $APP_OPTS6 $APP_OPTS7 $APP_OPTS8 $APP_OPTS9 $APP_OPTS10 -jar /workspace/app.jar"]
\ No newline at end of file
#!/bin/bash
# build.sh - 功能包括:镜像构建,推送镜像,处理none镜像。
# author: lixingyu
# 使用方法:
# $ ./build.sh <env_name> <build_timestamp>
# 参数:
# env_name:环境变量 build_timestamp:构建时间戳
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
# 函数定义
function print_usage {
# 打印使用说明
sed -n '2,7p' "$0"
}
function handle {
local env_name=$1
local build_timestamp=$2
local local_ip=$3
echo "执行的环境变量: ${env_name}"
echo "执行的构建时间戳: ${build_timestamp}"
if [ ! -f "$script_dir/env/env.${env_name}" ]; then
echo "错误: 文件 'env.${env_name}' 不存在." >&2
exit 1
fi
. $script_dir/env/env.${env_name}
local dir="${root_dir}/${svc_name}/${svc_env}"
local name="${svc_name}-${svc_env}"
local version=${version}-${build_timestamp}
echo "构建名称: ${name}"
echo "构建端口: ${svc_port}"
echo "构建版本: ${version}"
echo "推送仓库: ${domain}/${namespace}"
echo "完整镜像: ${domain}/${namespace}/${name}:${version}"
echo "---构建镜像---"
docker build \
--build-arg ENV_NAME=${profiles} \
--build-arg PORT=${svc_port} \
--build-arg NACOS_SERVER=${nacos_server} \
--build-arg NACOS_USERNAME=${nacos_username} \
--build-arg NACOS_PASSWORD=${nacos_password} \
--build-arg NACOS_LOCAL_IP=${local_ip} \
-f ./build/Dockerfile -t ${domain}/${namespace}/${name}:${version} .
echo "---推送镜像---"
docker login -u=${repo_username} -p=${repo_passwd} ${domain}
docker push ${domain}/${namespace}/${name}:${version}
echo "---清理none镜像---"
docker image prune -af
}
# 主程序入口点
function main {
if [ "$#" -ne 3 ]; then
print_usage
echo "错误: 需要提供三个参数 <env_name> <build_timestamp> <local_ip>">&2
exit 1
fi
local env_name=$1
local build_timestamp=$2
local local_ip=$3
handle "${env_name}" "${build_timestamp}" "${local_ip}"
}
# 错误处理
trap 'echo 发生了错误,脚本中断.' ERR
# 调用主函数
main "$@"
# 镜像仓库
# 版本 T1.0.0: T为测试版,R为稳定版
version="R1.0.0" # 可自定义
# 镜像仓库地址
domain="swr.cn-southwest-2.myhuaweicloud.com"
# 镜像分组,按部门区分
namespace="ciglobal"
#repo_username="ciglobal-ap"
#repo_passwd="ciglobal.zzsn"
repo_username="cn-southwest-2@O2PWMHIOLKRM0YPULE96"
repo_passwd="9e59dd258a1b25f2949549ad60be11b7a6f0f94349f62ad5b5d7fd1d839a1c0e"
# 服务配置
# 数据挂载根目录
root_dir="/zzsn/clb/logs"
# 需根据日志配置填写,比如:logback-spring.xml
svc_logs="/workspace/logs"
# 环境变量 test or prod
svc_env="prod"
profiles="nacos"
# 服务名
svc_name="leader-base"
# 服务端口
svc_port="9098"
# nacos配置
nacos_server="192.168.0.224:8848"
nacos_username="nacos"
nacos_password="nacos"
\ No newline at end of file
# 镜像仓库
# 版本 T1.0.0: T为测试版,R为稳定版
version="T1.0.0" # 可自定义
# 镜像仓库地址
domain="swr.cn-southwest-2.myhuaweicloud.com"
# 镜像分组,按部门区分
namespace="ciglobal"
#repo_username="ciglobal-ap"
#repo_passwd="ciglobal.zzsn"
repo_username="cn-southwest-2@O2PWMHIOLKRM0YPULE96"
repo_passwd="9e59dd258a1b25f2949549ad60be11b7a6f0f94349f62ad5b5d7fd1d839a1c0e"
# 服务配置
# 数据挂载根目录
root_dir="/zzsn/clb/logs"
# 需根据日志配置填写,比如:logback-spring.xml
svc_logs="/workspace/logs"
# 环境变量 test or prod
svc_env="test"
profiles="nacos"
# 服务名
svc_name="leader-base"
# 服务端口
svc_port="9098"
# nacos配置
nacos_server="192.168.0.225:8848"
nacos_username="nacos"
nacos_password="nacos"
\ No newline at end of file
#!/bin/bash
# run.sh - 功能包括:运行容器,处理none镜像。
# author: lixingyu
# 使用方法:
# $ ./run.sh <env_name> <build_timestamp>
# 参数:
# env_name:环境变量 build_timestamp:构建时间戳
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
# 函数定义
function print_usage {
# 打印使用说明
sed -n '2,7p' "$0"
}
function handle {
local env_name=$1
local build_timestamp=$2
echo "执行的环境变量: ${env_name}"
echo "执行的构建时间戳: ${build_timestamp}"
if [ ! -f "$script_dir/env/env.${env_name}" ]; then
echo "错误: 文件 'env.${env_name}' 不存在." >&2
exit 1
fi
. $script_dir/env/env.${env_name}
local dir="${root_dir}/${svc_name}/${svc_env}"
local name="${svc_name}-${svc_env}"
local version=${version}-${build_timestamp}
echo "---运行容器: ${name}:${version}---"
docker login -u=${repo_username} -p=${repo_passwd} ${domain}
docker pull ${domain}/${namespace}/${name}:${version}
if [ "$(docker ps -aqf "name=^${name}")" ]; then
# 如果存在,则停止并删除容器
echo "停止并删除容器: ${name}"
docker rm -f "${name}"
else
echo "容器不存在直接运行: ${name}"
fi
docker run --restart always -d -p ${svc_port}:${svc_port} --name ${name} \
-v /etc/localtime:/etc/localtime:ro \
-v ${dir}/logs:${svc_logs} \
${domain}/${namespace}/${name}:${version}
echo "---清理none镜像---"
docker image prune -af
}
# 主程序入口点
function main {
if [ "$#" -ne 2 ]; then
print_usage
echo "错误: 需要提供两个个参数 <env_name> <build_timestamp>" >&2
exit 1
fi
local env_name=$1
local build_timestamp=$2
handle "${env_name}" "${build_timestamp}"
}
# 错误处理
trap 'echo 发生了错误,脚本中断.' ERR
# 调用主函数
main "$@"
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="../clbLogs/leader" />
<property name="LOG_HOME" value="logs" />
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论