fix(jenkins): use curl --get --data-urlencode to avoid shell glob, no python3 required
This commit is contained in:
@@ -98,32 +98,18 @@ pipeline {
|
||||
]) {
|
||||
def services = sh(
|
||||
script: """
|
||||
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)
|
||||
PYEOF
|
||||
curl -sf -u "\${HARBOR_USER}:\${HARBOR_PASS}" \\
|
||||
--connect-timeout 10 --max-time 30 \\
|
||||
--get --data-urlencode "page_size=100" \\
|
||||
"${HARBOR_API}/projects/${params.HARBOR_PROJECT}/repositories" \\
|
||||
| tr ',' '\\n' \\
|
||||
| grep '"name"' \\
|
||||
| sed 's/.*"name":"//' \\
|
||||
| sed 's/".*//' \\
|
||||
| sed 's|.*/||' \\
|
||||
| sort \\
|
||||
| tr '\\n' ',' \\
|
||||
| sed 's/,\$//'
|
||||
""",
|
||||
returnStdout: true
|
||||
).trim()
|
||||
@@ -159,29 +145,15 @@ PYEOF
|
||||
|
||||
def digestResult = sh(
|
||||
script: """
|
||||
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
|
||||
curl -sf -u "\${HARBOR_USER}:\${HARBOR_PASS}" \\
|
||||
--connect-timeout 10 --max-time 30 \\
|
||||
"${HARBOR_API}/projects/${params.HARBOR_PROJECT}/repositories/${svc}/artifacts/${params.IMAGE_TAG}" \\
|
||||
| tr ',' '\\n' \\
|
||||
| grep '"digest"' \\
|
||||
| head -1 \\
|
||||
| sed 's/.*"digest":"//' \\
|
||||
| sed 's/".*//' \\
|
||||
|| true
|
||||
""",
|
||||
returnStdout: true
|
||||
).trim()
|
||||
|
||||
Reference in New Issue
Block a user