From a3c7c013c534eafaa1d87ca0d7ab4bddb4f3c189 Mon Sep 17 00:00:00 2001 From: wwweww <2646787260@qq.com> Date: Mon, 4 May 2026 12:44:44 +0800 Subject: [PATCH] fix(jenkins): replace curl with python3 urllib to avoid shell glob and timeout issues --- deploy/jenkins/Jenkinsfile.poll | 65 ++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/deploy/jenkins/Jenkinsfile.poll b/deploy/jenkins/Jenkinsfile.poll index 9efabcc..3f20983 100644 --- a/deploy/jenkins/Jenkinsfile.poll +++ b/deploy/jenkins/Jenkinsfile.poll @@ -96,21 +96,34 @@ pipeline { passwordVariable: 'HARBOR_PASS' ) ]) { - def harborListUrl = "${HARBOR_API}/projects/${params.HARBOR_PROJECT}/repositories?page_size=100" def services = sh( script: """ - HARBOR_LIST_URL="${harborListUrl}" - curl -s -u "\${HARBOR_USER}:\${HARBOR_PASS}" \\ - --connect-timeout 10 --max-time 30 \\ - "\${HARBOR_LIST_URL}" \\ - | python3 -c ' -import sys, json -repos = json.load(sys.stdin) -if not isinstance(repos, list): + python3 - <<'PYEOF' +import urllib.request, urllib.parse, json, sys, base64 + +registry = "${HARBOR_API}" +project = "${params.HARBOR_PROJECT}" +user = "${env.HARBOR_USER}" +passwd = "${env.HARBOR_PASS}" + +params = urllib.parse.urlencode({"page_size": 100}) +url = f"{registry}/projects/{project}/repositories?{params}" + +req = urllib.request.Request(url) +creds = base64.b64encode(f"{user}:{passwd}".encode()).decode() +req.add_header("Authorization", f"Basic {creds}") + +try: + with urllib.request.urlopen(req, timeout=30) as resp: + repos = json.loads(resp.read()) + if not isinstance(repos, list): + sys.exit(1) + names = [r["name"].split("/")[-1] for r in repos] + print(",".join(sorted(names))) +except Exception as e: + print(f"ERROR: {e}", file=sys.stderr) sys.exit(1) -names = [r["name"].split("/")[-1] for r in repos] -print(",".join(sorted(names))) -' 2>/dev/null || echo "" +PYEOF """, returnStdout: true ).trim() @@ -146,11 +159,29 @@ print(",".join(sorted(names))) def digestResult = sh( script: """ - curl -s -u "\${HARBOR_USER}:\${HARBOR_PASS}" \\ - --connect-timeout 10 \\ - --max-time 30 \\ - "${HARBOR_API}/projects/${params.HARBOR_PROJECT}/repositories/${svc}/artifacts/${params.IMAGE_TAG}" \\ - | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('digest',''))" 2>/dev/null || echo "" + python3 - <<'PYEOF' +import urllib.request, json, sys, base64 + +registry = "${HARBOR_API}" +project = "${params.HARBOR_PROJECT}" +svc = "${svc}" +tag = "${params.IMAGE_TAG}" +user = "${env.HARBOR_USER}" +passwd = "${env.HARBOR_PASS}" + +url = f"{registry}/projects/{project}/repositories/{svc}/artifacts/{tag}" +req = urllib.request.Request(url) +creds = base64.b64encode(f"{user}:{passwd}".encode()).decode() +req.add_header("Authorization", f"Basic {creds}") + +try: + with urllib.request.urlopen(req, timeout=30) as resp: + data = json.loads(resp.read()) + print(data.get("digest", "")) +except Exception as e: + print(f"ERROR: {e}", file=sys.stderr) + sys.exit(0) +PYEOF """, returnStdout: true ).trim()