#!/usr/bin/env python3 import subprocess import re # Step 1: Get CSRF token print("=== Step 1: Getting CSRF token ===") subprocess.call(["curl", "-s", "-c", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "http://localhost:8080/crumbIssuer/api/xml", "-o", "/dev/null"]) p = subprocess.Popen( ["curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "http://localhost:8080/crumbIssuer/api/xml"], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) xml_content, _ = p.communicate() xml_content = xml_content.decode('utf-8') match = re.search(r'([^<]+)', xml_content) if match: crumb = match.group(1) print(f"Got crumb: {crumb[:20]}...") else: print("Failed to get CSRF token") exit(1) # Step 2: Create credential using correct API print("\n=== Step 2: Creating credential ===") credential_xml = ''' GLOBAL registry-cred Private registry credentials for image push admin Registry@Fzx2026 ''' p = subprocess.Popen([ "curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "-H", "Jenkins-Crumb:" + crumb, "-H", "Content-Type: application/xml", "-X", "POST", "http://localhost:8080/credentials/store/system/domain/_/createCredentials", "-d", credential_xml ], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() print(f"Create status: {p.returncode}") if stderr: print(f"stderr: {stderr[:500]}") # Verify creation print("\n=== Step 3: Verifying credential ===") p = subprocess.Popen([ "curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "http://localhost:8080/credentials/store/system/domain/_/credential/registry-cred/api/json" ], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, _ = p.communicate() if b'"id":"registry-cred"' in stdout: print("✅ Credential created successfully!") else: print("❌ Credential creation failed") print(f"Response: {stdout[:500]}")