From 6722d774a7b33a565c3df4bd9e60f695248bf8f5 Mon Sep 17 00:00:00 2001 From: shindw Date: Wed, 4 Feb 2026 15:47:04 +0900 Subject: [PATCH] =?UTF-8?q?[api]=20Jenkinsfile.pjt=20-=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EC=A0=95=EC=B1=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile.pjt | 104 ++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/Jenkinsfile.pjt b/Jenkinsfile.pjt index 6fcbb7a..eb8687c 100644 --- a/Jenkinsfile.pjt +++ b/Jenkinsfile.pjt @@ -244,79 +244,79 @@ pipeline { passwordVariable: 'DOCKER_PASS' )]) { sshagent(['ssh-pjt']) { - sh ''' - set -e + sh '''#!/usr/bin/env bash + set -e - ssh -p ${SSH_PORT} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ - ${SSH_USER}@${SSH_HOST} \ - "REGISTRY_HOST='${REGISTRY_HOST}' IMAGE_REPO='${IMAGE_REPO}' DOCKER_USER='${DOCKER_USER}' DOCKER_PASS='${DOCKER_PASS}' bash -se" <<'EOF' - set -e + ssh -p ${SSH_PORT} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + ${SSH_USER}@${SSH_HOST} \ + "REGISTRY_HOST='${REGISTRY_HOST}' IMAGE_REPO='${IMAGE_REPO}' DOCKER_USER='${DOCKER_USER}' DOCKER_PASS='${DOCKER_PASS}' bash -se" <<'REMOTE_EOF' + set -e - REGISTRY_URL="https://${REGISTRY_HOST}" - REPO="${IMAGE_REPO}" - KEEP=5 - AUTH="${DOCKER_USER}:${DOCKER_PASS}" + REGISTRY_URL="https://${REGISTRY_HOST}" + REPO="${IMAGE_REPO}" + KEEP=5 + AUTH="${DOCKER_USER}:${DOCKER_PASS}" - command -v jq >/dev/null 2>&1 || (sudo apt-get update -y && sudo apt-get install -y jq) + command -v jq >/dev/null 2>&1 || (sudo apt-get update -y && sudo apt-get install -y jq) - echo "[1/6] Debug URL" - echo "REGISTRY_URL=${REGISTRY_URL}" - echo "TAGS_URL=${REGISTRY_URL}/v2/${REPO}/tags/list" + echo "[1/6] Debug URL" + echo "TAGS_URL=${REGISTRY_URL}/v2/${REPO}/tags/list" - echo "[2/6] Collect running tags to protect" - RUNNING_TAGS=$(docker ps --format '{{.Image}}' | \ - grep -E "^${REGISTRY_HOST}/${REPO}:" | \ - awk -F: '{print $2}' | sort -u || true) + echo "[2/6] Collect running tags to protect" + RUNNING_TAGS=$(docker ps --format '{{.Image}}' | \ + grep -E "^${REGISTRY_HOST}/${REPO}:" | \ + awk -F: '{print $2}' | sort -u || true) - echo "[3/6] Fetch tags from registry" - TAGS=$(curl -fsS -u "${AUTH}" "${REGISTRY_URL}/v2/${REPO}/tags/list" | jq -r '.tags[]?' || true) + echo "[3/6] Fetch tags from registry" + TAGS=$(curl -fsS -u "${AUTH}" "${REGISTRY_URL}/v2/${REPO}/tags/list" | jq -r '.tags[]?' || true) - if [ -z "$TAGS" ]; then - echo "No tags found in registry. Skip." - exit 0 - fi + if [ -z "$TAGS" ]; then + echo "No tags found in registry. Skip." + exit 0 + fi - echo "[4/6] Sort tags desc" - SORTED=$(echo "$TAGS" | sort -r) - KEEP_TAGS=$(echo "$SORTED" | head -n $KEEP) - DEL_CANDIDATES=$(echo "$SORTED" | tail -n +$((KEEP+1))) + echo "[4/6] Sort tags desc" + SORTED=$(echo "$TAGS" | sort -r) + KEEP_TAGS=$(echo "$SORTED" | head -n $KEEP) + DEL_CANDIDATES=$(echo "$SORTED" | tail -n +$((KEEP+1))) - echo "Keep tags:" - echo "$KEEP_TAGS" | sed 's/^/ - /' + echo "Keep tags:" + echo "$KEEP_TAGS" | sed 's/^/ - /' - echo "[5/6] Delete old tags except running tags" - for TAG in $DEL_CANDIDATES; do - if [ -n "$RUNNING_TAGS" ] && echo "$RUNNING_TAGS" | grep -qx "$TAG"; then - echo "Skip running tag: ${REPO}:${TAG}" - continue - fi + echo "[5/6] Delete old tags except running tags" + for TAG in $DEL_CANDIDATES; do + if [ -n "$RUNNING_TAGS" ] && echo "$RUNNING_TAGS" | grep -qx "$TAG"; then + echo "Skip running tag: ${REPO}:${TAG}" + continue + fi - echo "Deleting ${REPO}:${TAG}" + echo "Deleting ${REPO}:${TAG}" - DIGEST=$(curl -fsSI -u "${AUTH}" \ - -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ - "${REGISTRY_URL}/v2/${REPO}/manifests/${TAG}" \ - | awk -F': ' '/Docker-Content-Digest/ {print $2}' | tr -d '\r') + DIGEST=$(curl -fsSI -u "${AUTH}" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + "${REGISTRY_URL}/v2/${REPO}/manifests/${TAG}" \ + | awk -F': ' '/Docker-Content-Digest/ {print $2}' | tr -d '\r') - if [ -z "$DIGEST" ]; then - echo " digest not found. skip ${TAG}" - continue - fi + if [ -z "$DIGEST" ]; then + echo " digest not found. skip ${TAG}" + continue + fi - curl -fsS -u "${AUTH}" -X DELETE "${REGISTRY_URL}/v2/${REPO}/manifests/${DIGEST}" || true - done + curl -fsS -u "${AUTH}" -X DELETE "${REGISTRY_URL}/v2/${REPO}/manifests/${DIGEST}" || true + done - echo "[6/6] Garbage collect (reclaim disk)" - docker exec registry registry garbage-collect /etc/docker/registry/config.yml + echo "[6/6] Garbage collect (reclaim disk)" + docker exec registry registry garbage-collect /etc/docker/registry/config.yml - echo "Registry cleanup done." - EOF - ''' + echo "Registry cleanup done." + REMOTE_EOF + ''' } } } } + } }