内网环境,基于k8s docer 自动发包
背景:生产环境是内网,无法连接外部git环境,需要上传tar包打成镜像,然后发布。
简单写了个脚本,记录下方便复用。
将tar包和脚本拷贝到同一个目录下。
使用方式:
tar 包名称格式:服务名-版本号.tar
启动命令 ./docker-load.sh 服务名 版本号
脚本中的 docker 的 ip port、 镜像名称、k8s的命名空间换成你自己。
脚本:
#!/bin/bashSERVICE_NAME="$1"
SERVICE_VER="$2"TAR_FILE=${SERVICE_NAME}-${SERVICE_VER}.tar
IMAGE_NAME=registry.XXX.com/dev/${SERVICE_NAME}:${SERVICE_VER}
TARGET_TAG=DOCKER-IP:PORT/NAMESPACE/${SERVICE_NAME}:${SERVICE_VER}# 本地加载镜像
echo "loading image from $TAR_FILE ..."
docker load -i "$TAR_FILE"
#IMAGE_ID=$(docker load -i "$TAR_FILE" | awk '/Loaded image:/ {pringt $3}')#if [ -z "$IMAGE_ID" ]; then
# echo "Failed to load image from $TAR_FILE"
# exit 1
#fi#echo "Image loaded with ID: $IMAGE_ID"# 打tag
echo "Tagging image $IMAGE_ID as $TARGET_TAG ..."
docker tag "$IMAGE_NAME" "$TARGET_TAG"# 推送镜像
echo "Pushing image $TARGET_TAG ..."
docker push "$TARGET_TAG"# k8s升级镜像
echo "Set image $SERVICE_NAME $TARGET_TAG ..."
kubectl set image -n NAMESPACE deployment $SERVICE_NAME ${SERVICE_NAME}=$TARGET_TAG --record