提交 76334d55 作者: 李星宇

脚本抽象

上级 04f86fc1
......@@ -14,12 +14,15 @@ WORKDIR /workspace
COPY --from=builder /workspace/target/*.jar /workspace/app.jar
ENV APP_OPTS1="-Dspring.profiles.active=test"
ARG ENV_NAME
ARG PORT
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 JVM_OPTS="-Xmx2024M -Xms256M"
EXPOSE 9099
EXPOSE ${PORT}
ENTRYPOINT ["sh","-c","java $APP_OPTS1 $APP_OPTS2 $APP_OPTS3 $APP_OPTS4 -jar $JVM_OPTS /workspace/app.jar"]
\ No newline at end of file
#!/bin/bash
# build.sh - 功能包括:镜像构建,推送镜像,处理none镜像。
#
# 使用方法:
# $ ./build.sh <env_name>
#
# 参数:
# env_name 环境变量
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
# 函数定义
function print_usage {
# 打印使用说明
sed -n '2,8p' "$0"
}
function handle {
local env_name=$1
echo "执行的环境变量: $env_name"
if [ ! -f "$script_dir/env/env.$env_name" ]; then
echo "错误: 文件 'env.$env_name' 不存在." >&2
exit 1
fi
. $script_dir/env/env.$env_name
username="${repo_username}"
passwd="${repo_passwd}"
dir="${root_dir}/${svc_name}/${svc_env}"
name="${svc_name}-${svc_env}"
echo "构建名称: ${name}"
echo "构建端口: ${svc_port}"
echo "构建版本: ${version}"
echo "推送仓库: ${domain}/${namespace}"
echo "---构建镜像---"
docker build --build-arg ENV_NAME=${svc_env} --build-arg PORT=${svc_port} -f ./build/Dockerfile -t ${domain}/${namespace}/${name}:${version} .
echo "---推送镜像---"
docker login -u=$username -p=${passwd} ${domain}
docker push ${domain}/${namespace}/${name}:${version}
echo "---清理none镜像---"
docker image prune -af
}
# 主程序入口点
function main {
if [ "$#" -ne 1 ]; then
print_usage
echo "错误: 需要提供一个参数(env_name)." >&2
exit 1
fi
local env_name=$1
handle "$env_name"
}
# 错误处理
trap 'echo 发生了错误,脚本中断.' ERR
# 调用主函数
main "$@"
# 镜像仓库
version="latest"
domain="registry.cn-beijing.aliyuncs.com"
namespace="yotop"
# 服务配置
root_dir="/zzsn"
svc_logs="/workspace/logs"
svc_env="prod"
svc_name="think-tank"
svc_port="9098"
......@@ -5,6 +5,9 @@ namespace="yotop"
# 服务配置
root_dir="/zzsn"
svc_name="think-tank"
svc_logs="/workspace/logs"
svc_env="test"
svc_name="think-tank"
svc_port="9099"
#!/bin/bash
# run.sh - 功能包括:运行容器,处理none镜像。
#
# 使用方法:
# $ ./run.sh <env_name>
#
# 参数:
# env_name 环境变量
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
# 函数定义
function print_usage {
# 打印使用说明
sed -n '2,8p' "$0"
}
function handle {
local env_name=$1
echo "执行的环境变量: $env_name"
if [ ! -f "$script_dir/env/env.$env_name" ]; then
echo "错误: 文件 'env.$env_name' 不存在." >&2
exit 1
fi
. $script_dir/env/env.$env_name
dir="${root_dir}/${svc_name}/${svc_env}"
name="${svc_name}-${svc_env}"
echo "---运行容器: ${name}---"
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 1 ]; then
print_usage
echo "错误: 需要提供一个参数(env_name)." >&2
exit 1
fi
local env_name=$1
handle "$env_name"
}
# 错误处理
trap 'echo 发生了错误,脚本中断.' ERR
# 调用主函数
main "$@"
#!/bin/bash
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
. ${script_dir}/.env
username="${repo_username}"
passwd="${repo_passwd}"
dir="${root_dir}/${svc_name}/${svc_env}"
name="${svc_name}-${svc_env}"
echo "构建名称: ${name}"
echo "构建版本: ${version}"
echo "推送仓库: ${domain}/${namespace}"
echo "构建镜像"
docker build -f ./build/${svc_env}/Dockerfile -t ${domain}/${namespace}/${name}:${version} .
echo "推送镜像"
docker login -u=$username -p=${passwd} ${domain}
docker push ${domain}/${namespace}/${name}:${version}
echo "清理none镜像"
docker image prune -af
#!/bin/sh
set -eu
# 获取脚本的绝对路径(包括文件名)
script_path=$(readlink -f "$0")
# 获取脚本所在的目录的绝对路径
script_dir=$(dirname "$script_path")
. ${script_dir}/.env
dir="${root_dir}/${svc_name}/${svc_env}"
name="${svc_name}-${svc_env}"
echo "运行容器: ${name}"
if [ "$(docker ps -aqf "name=^${name}")" ]; then
# 如果存在,则停止并删除容器
echo "停止并删除容器: ${name}"
docker rm -f "${name}"
else
echo "容器不存在直接运行: ${name}"
fi
docker run --restart always -d -p 9099:9099 --name ${name} \
-v /etc/localtime:/etc/localtime:ro \
-v ${dir}/logs:/clbLogs/thinktank \
${domain}/${namespace}/${name}:${version}
echo "清理none镜像"
docker image prune -af
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="../clbLogs/thinktank" />
<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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论