nalinv-int/deploy/deploy-prd.sh

69 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
HARBOR="${HARBOR:-192.168.100.49:30002}"
HARBOR_PROJECT="${HARBOR_PROJECT:-prd}"
HARBOR_USER="${HARBOR_USER:?HARBOR_USER is required}"
HARBOR_PASS="${HARBOR_PASS:?HARBOR_PASS is required}"
SERVICE="${SERVICE:-imes-custom-nalinv-int}"
IMAGE_REPO="${HARBOR}/${HARBOR_PROJECT}/${SERVICE}"
GITEA_REPO="${GITEA_REPO:?GITEA_REPO is required}"
MANIFEST="${MANIFEST:-prd/${SERVICE}.yaml}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
MAVEN_SETTINGS="${MAVEN_SETTINGS:-}"
if [ -z "$MAVEN_SETTINGS" ] && [ -f /var/jenkins_home/.m2/settings.xml ]; then
MAVEN_SETTINGS="/var/jenkins_home/.m2/settings.xml"
fi
MAVEN_REPO_LOCAL="${MAVEN_REPO_LOCAL:-}"
if [ -z "$MAVEN_REPO_LOCAL" ] && [ -d /var/jenkins_home/.m2/repository ]; then
MAVEN_REPO_LOCAL="/var/jenkins_home/.m2/repository"
fi
MAVEN_CMD=(mvn)
if [ -n "$MAVEN_SETTINGS" ]; then
MAVEN_CMD+=(--settings "$MAVEN_SETTINGS")
fi
if [ -n "$MAVEN_REPO_LOCAL" ]; then
MAVEN_CMD+=("-Dmaven.repo.local=$MAVEN_REPO_LOCAL")
fi
echo "==> [1/4] 构建 JAR..."
"${MAVEN_CMD[@]}" clean package -DskipTests -pl int-app -am -q
echo " 完成: int-app/target/iep-int.jar ($(du -sh int-app/target/iep-int.jar | cut -f1))"
TAG=$(date +%Y%m%d%H%M%S)
IMAGE="${IMAGE_REPO}:${TAG}"
echo "==> [2/4] 构建镜像 $IMAGE ..."
if docker buildx version >/dev/null 2>&1; then
docker buildx build --platform linux/amd64 -t "$IMAGE" --load .
else
docker build -t "$IMAGE" .
fi
echo " 镜像构建完成"
echo "==> [3/4] 推送到 Harbor..."
echo "$HARBOR_PASS" | docker login "$HARBOR" -u "$HARBOR_USER" --password-stdin
docker push "$IMAGE"
echo " 推送完成"
echo "==> [4/4] 更新 k8s-manifests/prd..."
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
git clone "$GITEA_REPO" "$TMPDIR" -q
cd "$TMPDIR"
git config user.email "deploy@mes.local"
git config user.name "deploy-jenkins"
sed -i '' "s|${IMAGE_REPO}:[^ ]*|${IMAGE}|" "$MANIFEST" 2>/dev/null || \
sed -i "s|${IMAGE_REPO}:[^ ]*|${IMAGE}|" "$MANIFEST"
git add "$MANIFEST"
git commit -m "deploy: ${SERVICE} prd -> ${TAG}"
git push -q
echo ""
echo "PRD 部署提交完成: $IMAGE"
echo "ArgoCD Application: prd-services"