Files
kamco-cd-cron/shp-exporter/offline_upload_to_nexus.sh

99 lines
3.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# ====== 여기만 네 환경에 맞게 ======
NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100
REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed)
USER="admin"
PASS="Kamco2026!" # 실제 비번
# ===================================
# 압축 풀기
rm -rf m2repo offline-seed/m2repo
tar -xzf m2repo-seed.tgz
ROOT="./m2repo"
[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo"
[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; }
LOGDIR="./upload-logs"
mkdir -p "$LOGDIR"
OKLOG="$LOGDIR/ok.txt"
FAILLOG="$LOGDIR/fail.txt"
RESP="$LOGDIR/resp.tmp"
LIST="$LOGDIR/version_dirs.txt"
: > "$OKLOG"
: > "$FAILLOG"
# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**/<artifact>/<version>
# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집
find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \
| xargs -0 -n1 dirname \
| sort -u > "$LIST"
count="$(wc -l < "$LIST" | tr -d ' ')"
echo "Version dirs = $count"
[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; }
upload_dir() {
local verDir="$1"
local rel="${verDir#${ROOT}/}"
# rel = group/path/artifact/version
local groupPath artifact version groupId
groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')"
artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')"
version="$(echo "$rel" | awk -F/ '{print $NF}')"
groupId="${groupPath//\//.}"
local pom jar mod
pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)"
jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)"
mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)"
[ -z "$pom" ] && [ -z "$jar" ] && return 0
echo "UPLOAD: $groupId:$artifact:$version"
args=(
-sS -u "$USER:$PASS"
-X POST "$NEXUS/service/rest/v1/components?repository=$REPO"
-F "maven2.groupId=$groupId"
-F "maven2.artifactId=$artifact"
-F "maven2.version=$version"
)
n=1
if [ -n "$pom" ]; then
args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1))
fi
if [ -n "$jar" ]; then
args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1))
fi
if [ -n "$mod" ]; then
args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1))
fi
http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)"
if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then
echo "$groupId:$artifact:$version" >> "$OKLOG"
return 0
else
echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG"
sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true
echo >> "$FAILLOG"
return 1
fi
}
fails=0
while IFS= read -r d; do
if ! upload_dir "$d"; then
fails=$((fails+1))
fi
done < "$LIST"
echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails"
echo "OKLOG : $OKLOG"
echo "FAILLOG: $FAILLOG"