{"id":"9d5dc967-ee2a-4a90-82c7-9d4437fad0b0","shortId":"CbWWPa","kind":"skill","title":"kubesphere-devops-credentials","tagline":"Use when managing credentials in KubeSphere DevOps, including repository credentials, kubeconfig, and API tokens","description":"# KubeSphere DevOps Credentials\n\n## Overview\n\nCredentials in KubeSphere DevOps are Kubernetes Secrets with specific labels and annotations. They are synced to Jenkins for use in pipelines. Supported types include SSH keys, username/password, and secret tokens.\n\n## When to Use\n\n- Creating credentials for Git repositories\n- Setting up deployment credentials (kubeconfig, registry)\n- Managing API tokens for external services\n- Troubleshooting credential access issues\n- Migrating credentials between DevOps projects\n\n## Credential Types\n\n| Type | Use Case | Secret Key |\n|------|----------|------------|\n| **SSH** | Git repositories | `username`, `privatekey` |\n| **Basic** | Username/password | `username`, `password` |\n| **Secret** | API tokens, secrets | `secret` |\n| **Kubeconfig** | Kubernetes clusters | `kubeconfig` (v1.1.x only) |\n| **SSH Username/Pass** | Git with user/pass | `username`, `password` |\n| **String** | Generic text/tokens | `secret` |\n\n## Resource Structure\n\nCredentials are stored as Kubernetes Secrets with DevOps labels:\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: my-credential\n  namespace: project-xxx  # DevOps project namespace\n  labels:\n    devops.kubesphere.io/credential: \"true\"\n  annotations:\n    credential.devops.kubesphere.io/syncstatus: successful\n    credential.devops.kubesphere.io/type: ssh|basic-auth|secret-text\nstringData:\n  username: git-user\n  privatekey: |\n    -----BEGIN OPENSSH PRIVATE KEY-----\n    ...\n    -----END OPENSSH PRIVATE KEY-----\ntype: credential.devops.kubesphere.io/ssh  # CRITICAL: Must use credential.devops.kubesphere.io/* type, NOT Opaque!\n```\n\n\n**⚠️ CRITICAL: Secret Type Must Be `credential.devops.kubesphere.io/*`**\n\nThe `type` field must be one of:\n- `credential.devops.kubesphere.io/basic-auth`\n- `credential.devops.kubesphere.io/ssh-auth`\n- `credential.devops.kubesphere.io/secret-text`\n- `credential.devops.kubesphere.io/kubeconfig`\n\n**Using `type: Opaque` will result in:**\n- Credential sync status stuck at \"pending\"\n- Jenkins cannot find the credential\n- Pipeline builds fail with \"CredentialId could not be found\"\n\n**Controller Logic:** The credential controller only watches secrets with types starting with `credential.devops.kubesphere.io/` (see `devopscredential_controller.go` line 102). Secrets with `type: Opaque` are completely ignored.\n\n## API Endpoints\n\n| Operation | Method | Endpoint |\n|-----------|--------|----------|\n| List Credentials | GET | `/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials` |\n| Create Credential | POST | `/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials` |\n| Get Credential | GET | `/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials/{credential}` |\n| Update Credential | PUT | `/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials/{credential}` |\n| Delete Credential | DELETE | `/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials/{credential}` |\n| Get Usage | GET | `/kapis/devops.kubesphere.io/v1alpha2/namespaces/{devops}/credentials/{credential}/usage` |\n\n## Common Operations\n\n### List Credentials\n\n```bash\ncurl \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials\" \\\n  -H \"Authorization: Bearer $TOKEN\"\n```\n\n### Create SSH Credential\n\n```bash\ncurl -X POST \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"v1\",\n    \"kind\": \"Secret\",\n    \"metadata\": {\n      \"name\": \"github-ssh-key\",\n      \"annotations\": {\n        \"credential.devops.kubesphere.io/type\": \"ssh\"\n      }\n    },\n    \"stringData\": {\n      \"username\": \"git\",\n      \"privatekey\": \"-----BEGIN OPENSSH PRIVATE KEY-----\\n...\\n-----END OPENSSH PRIVATE KEY-----\"\n    },\n    \"type\": \"credential.devops.kubesphere.io/ssh-auth\"\n  }'\n```\n\n### Create Basic Auth Credential\n\n```bash\ncurl -X POST \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"v1\",\n    \"kind\": \"Secret\",\n    \"metadata\": {\n      \"name\": \"docker-registry\",\n      \"annotations\": {\n        \"credential.devops.kubesphere.io/type\": \"basic-auth\"\n      }\n    },\n    \"stringData\": {\n      \"username\": \"docker-user\",\n      \"password\": \"docker-password\"\n    },\n    \"type\": \"credential.devops.kubesphere.io/basic-auth\"\n  }'\n```\n\n\n### Create Basic Auth for Git Access Token (GitHub/GitLab)\n\n**Best Practice:** Use `basic-auth` type for Git access tokens:\n\n```bash\n# For GitHub/GitLab access tokens\ncurl -X POST \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"v1\",\n    \"kind\": \"Secret\",\n    \"metadata\": {\n      \"name\": \"github-token\",\n      \"annotations\": {\n        \"credential.devops.kubesphere.io/type\": \"basic-auth\"\n      }\n    },\n    \"stringData\": {\n      \"username\": \"git\",           # Can be any value for token auth\n      \"password\": \"ghp_xxxxxxxxxx\"  # Your GitHub/GitLab access token\n    },\n    \"type\": \"credential.devops.kubesphere.io/basic-auth\"\n  }'\n```\n\n**Why basic-auth for tokens?**\n- Git access tokens are used like passwords in HTTPS Git URLs\n- ArgoCD and Jenkins both support basic-auth for Git authentication\n- Username can be any value (often 'git' or your username)\n- Password field holds the actual token\n\n**Supported Git Providers:**\n- GitHub Personal Access Token: `ghp_xxxxxxxxxxxx`\n- GitLab Personal Access Token: `glpat-xxxxxxxxxx`\n- Bitbucket App Password\n- Gitea/Forgejo Access Token\n\n### Create Secret Text Credential\n\n```bash\ncurl -X POST \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/credentials\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"v1\",\n    \"kind\": \"Secret\",\n    \"metadata\": {\n      \"name\": \"api-token\",\n      \"annotations\": {\n        \"credential.devops.kubesphere.io/type\": \"secret-text\"\n      }\n    },\n    \"stringData\": {\n      \"secret\": \"my-api-token-value\"\n    },\n    \"type\": \"credential.devops.kubesphere.io/secret-text\"\n  }'\n```\n\n## Using Credentials in Pipelines\n\n### SSH Key for Git Checkout\n\n```groovy\npipeline {\n  agent any\n  stages {\n    stage('Checkout') {\n      steps {\n        git credentialsId: 'github-ssh-key', url: 'git@github.com:org/repo.git'\n      }\n    }\n  }\n}\n```\n\n### WithCredentials Step\n\n```groovy\npipeline {\n  agent any\n  stages {\n    stage('Deploy') {\n      steps {\n        withCredentials([\n          usernamePassword(\n            credentialsId: 'docker-registry',\n            usernameVariable: 'DOCKER_USER',\n            passwordVariable: 'DOCKER_PASS'\n          )\n        ]) {\n          sh 'echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin'\n        }\n      }\n    }\n  }\n}\n```\n\n### Kubeconfig (v1.2.x+ with string type)\n\n```groovy\npipeline {\n  agent any\n  stages {\n    stage('Deploy to K8s') {\n      steps {\n        withCredentials([string(credentialsId: 'my-kubeconfig', variable: 'KUBECONFIG_DATA')]) {\n          sh '''\n            printf \"%s\" \"$KUBECONFIG_DATA\" > kubeconfig\n            kubectl --kubeconfig=kubeconfig apply -f deployment.yaml\n          '''\n        }\n      }\n    }\n  }\n}\n```\n\n\n## GitRepository Resource\n\nGitRepository connects a Git repository with a credential for use in pipelines and ArgoCD applications.\n\n### GitRepository Structure\n\n```yaml\napiVersion: devops.kubesphere.io/v1alpha3\nkind: GitRepository\nmetadata:\n  name: my-repo\n  namespace: demo-project\nspec:\n  url: https://github.com/example/repo.git\n  provider: github              # Git provider: github, gitlab, bitbucket, etc.\n  secret:                       # Reference to credential secret\n    name: github-token\n    namespace: demo-project\n  description: \"Main application repository\"\n```\n\n**Required Fields:**\n- `spec.url`: Repository URL\n- `spec.provider`: Git provider type (`github`, `gitlab`, `bitbucket`, `gitea`, etc.)\n- `spec.secret.name`: Name of the credential secret\n- `spec.secret.namespace`: Namespace of the credential secret\n\n### Create GitRepository\n\n**Via API:**\n```bash\ncurl -X POST \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/gitrepositories\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"devops.kubesphere.io/v1alpha3\",\n    \"kind\": \"GitRepository\",\n    \"metadata\": {\n      \"name\": \"demo-jenkinsfiles\",\n      \"namespace\": \"demo-project\"\n    },\n    \"spec\": {\n      \"url\": \"https://github.com/stoneshi-yunify/argocd-example-apps.git\",\n      \"provider\": \"github\",\n      \"secret\": {\n        \"name\": \"github-token\",\n        \"namespace\": \"demo-project\"\n      },\n      \"description\": \"Demo repository with examples\"\n    }\n  }'\n```\n\n**Via kubectl:**\n```bash\ncat <<EOF | kubectl apply -f -\napiVersion: devops.kubesphere.io/v1alpha3\nkind: GitRepository\nmetadata:\n  name: my-application-repo\n  namespace: demo-project\nspec:\n  url: https://github.com/example/my-app.git\n  provider: github\n  secret:\n    name: github-token\n    namespace: demo-project\n  description: \"Application source code\"\nEOF\n```\n\n### List GitRepositories\n\n```bash\n# Via API\ncurl \"https://kubesphere-api/kapis/devops.kubesphere.io/v1alpha3/namespaces/{devops}/gitrepositories\" \\\n  -H \"Authorization: Bearer $TOKEN\" | jq '.items[].metadata.name'\n\n# Via kubectl\nkubectl get gitrepositories -n demo-project\n```\n\n## Credential + GitRepository Usage Patterns\n\n### Pattern 1: Multi-Branch Pipeline with GitRepository\n\n**Complete workflow for private Git repository:**\n\n```yaml\n# Step 1: Create credential for Git access\napiVersion: v1\nkind: Secret\nmetadata:\n  name: github-token\n  namespace: demo-project\n  annotations:\n    credential.devops.kubesphere.io/type: basic-auth\nstringData:\n  username: \"git\"\n  password: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\ntype: credential.devops.kubesphere.io/basic-auth\n---\n# Step 2: Create GitRepository linking repo + credential\napiVersion: devops.kubesphere.io/v1alpha3\nkind: GitRepository\nmetadata:\n  name: my-app-repo\n  namespace: demo-project\nspec:\n  url: https://github.com/org/my-app.git\n  provider: github\n  secret:\n    name: github-token\n    namespace: demo-project\n  description: \"Application source code\"\n---\n# Step 3: Create multi-branch pipeline using GitRepository\napiVersion: devops.kubesphere.io/v1alpha3\nkind: Pipeline\nmetadata:\n  name: my-multibranch-pipeline\n  namespace: demo-project\nspec:\n  type: multi-branch-pipeline\n  multi_branch_pipeline:\n    name: my-multibranch-pipeline\n    source_type: git\n    git_source:\n      url: https://github.com/org/my-app.git\n      credential_id: github-token  # Reference credential directly\n      discover_branches: true\n    script_path: Jenkinsfile\n```\n\n### Pattern 2: ArgoCD Application with GitRepository\n\n```yaml\n# Step 1: Create credential (basic-auth for token)\napiVersion: v1\nkind: Secret\nmetadata:\n  name: github-token\n  namespace: demo-project\n  annotations:\n    credential.devops.kubesphere.io/type: basic-auth\nstringData:\n  username: \"git\"\n  password: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\n---\n# Step 2: Create GitRepository\napiVersion: devops.kubesphere.io/v1alpha3\nkind: GitRepository\nmetadata:\n  name: argo-manifests\n  namespace: demo-project\nspec:\n  url: https://github.com/org/k8s-manifests.git\n  credentialId: github-token\n---\n# Step 3: Create ArgoCD Application referencing the repository\napiVersion: gitops.kubesphere.io/v1alpha1\nkind: Application\nmetadata:\n  name: my-app\n  namespace: demo-project\nspec:\n  argoApp:\n    spec:\n      source:\n        repoURL: https://github.com/org/k8s-manifests.git\n        targetRevision: HEAD\n        path: overlays/production\n      destination:\n        server: https://kubernetes.default.svc\n        namespace: demo-project\n      syncPolicy:\n        automated:\n          prune: true\n          selfHeal: true\n```\n\n### Pattern 3: Complete Setup Script\n\n```bash\n#!/bin/bash\nset -e\n\nexport KUBESPHERE_API=\"https://kubesphere-api.example.com\"\nexport API_TOKEN=\"<tenant-token>\"\nexport DEVOPS_PROJECT=\"demo-project\"\n\n# 1. Create credential for GitHub access\necho \"Creating GitHub credential...\"\ncurl -s -X POST \"${KUBESPHERE_API}/kapis/devops.kubesphere.io/v1alpha3/namespaces/${DEVOPS_PROJECT}/credentials\" \\\n  -H \"Authorization: Bearer ${API_TOKEN}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"v1\",\n    \"kind\": \"Secret\",\n    \"metadata\": {\n      \"name\": \"github-token\",\n      \"annotations\": {\n        \"credential.devops.kubesphere.io/type\": \"basic-auth\"\n      }\n    },\n    \"stringData\": {\n      \"username\": \"git\",\n      \"password\": \"'${GITHUB_TOKEN}'\"\n    },\n    \"type\": \"credential.devops.kubesphere.io/basic-auth\"\n  }' | jq -r '.metadata.name'\n\n# 2. Create GitRepository\necho \"Creating GitRepository...\"\ncurl -s -X POST \"${KUBESPHERE_API}/kapis/devops.kubesphere.io/v1alpha3/namespaces/${DEVOPS_PROJECT}/gitrepositories\" \\\n  -H \"Authorization: Bearer ${API_TOKEN}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"devops.kubesphere.io/v1alpha3\",\n    \"kind\": \"GitRepository\",\n    \"metadata\": {\n      \"name\": \"my-repo\",\n      \"namespace\": \"'${DEVOPS_PROJECT}'\"\n    },\n    \"spec\": {\n      \"url\": \"https://github.com/'${GITHUB_OWNER}'/'${GITHUB_REPO}'.git\",\n      \"credentialId\": \"github-token\",\n      \"description\": \"Application repository\"\n    }\n  }' | jq -r '.metadata.name'\n\n# 3. Create multi-branch pipeline using the repository\necho \"Creating multi-branch pipeline...\"\ncurl -s -X POST \"${KUBESPHERE_API}/kapis/devops.kubesphere.io/v1alpha3/namespaces/${DEVOPS_PROJECT}/pipelines\" \\\n  -H \"Authorization: Bearer ${API_TOKEN}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"devops.kubesphere.io/v1alpha3\",\n    \"kind\": \"Pipeline\",\n    \"metadata\": {\n      \"name\": \"my-app-pipeline\",\n      \"namespace\": \"'${DEVOPS_PROJECT}'\"\n    },\n    \"spec\": {\n      \"type\": \"multi-branch-pipeline\",\n      \"multi_branch_pipeline\": {\n        \"name\": \"my-app-pipeline\",\n        \"source_type\": \"git\",\n        \"git_source\": {\n          \"url\": \"https://github.com/'${GITHUB_OWNER}'/'${GITHUB_REPO}'.git\",\n          \"credential_id\": \"github-token\",\n          \"discover_branches\": true,\n          \"discover_tags\": false\n        },\n        \"script_path\": \"Jenkinsfile\"\n      }\n    }\n  }' | jq -r '.metadata.name'\n\necho \"Setup complete!\"\n```\n\n## Sync Status Troubleshooting\n\nCredentials are synced from Kubernetes to Jenkins. Check sync status:\n\n```bash\n# Check credential annotation\nkubectl -n <devops-project> get secret <credential-name> -o jsonpath='{.metadata.annotations.credential\\.devops\\.kubesphere\\.io/syncstatus}'\n\n# Force resync all credentials\nkubectl get namespaces -l kubesphere.io/devopsproject,devops.kubesphere.io/managed=true --no-headers | \\\n  awk '{print $1}' | \\\n  xargs -I{} kubectl annotate secrets credential.devops.kubesphere.io/syncstatus- --all -n {}\n```\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| kubeconfigContent not working (v1.2+) | Use `string` type with `withCredentials` |\n| Credential not appearing in Jenkins | Check syncstatus annotation |\n| SSH auth fails | Ensure username is correct (usually \"git\") |\n| Secret not found in pipeline | Verify credentialsId matches exactly |\n\n| Using wrong credential type for Git tokens | Use `basic-auth` not `secret-text` for Git access tokens |\n| GitRepository credential not found | Ensure credential exists before creating GitRepository |\n| Git clone fails with 401/403 | Check token hasn't expired and has required permissions |\n| ArgoCD cannot access private repo | Verify GitRepository credentialId matches credential name |\n| Cannot delete credential | Check if used by pipelines (use `/usage` endpoint) |\n\n## Breaking Changes in v1.2.x\n\n**Removed:** `kubernetes-cd` plugin and `kubeconfigContent` credential type\n\n**Migration:**\n```groovy\n// v1.1.x (OLD)\nwithCredentials([kubeconfigContent(credentialsId: 'my-kubeconfig', variable: 'KUBECONFIG_DATA')]) {\n  sh 'kubectl --kubeconfig=kubeconfig get node'\n}\n\n// v1.2.x (NEW)\nwithCredentials([string(credentialsId: 'my-kubeconfig', variable: 'KUBECONFIG_DATA')]) {\n  sh 'printf \"%s\" \"$KUBECONFIG_DATA\" > kubeconfig && kubectl --kubeconfig=kubeconfig get node'\n}\n```\n\n## References\n\n- [DevOps README - Credentials](/root/go/src/github.com/kubesphere/kse-extensions/devops/README.md)\n- [Jenkins Credentials Plugin](https://plugins.jenkins.io/credentials/)","tags":["kubesphere","devops","credentials","agent-skills","cloud-native","cncf","ebpf","hacktoberfest","kubernetes","llm","multi-cluster","multi-tenancy"],"capabilities":["skill","source-kubesphere","skill-kubesphere-devops-credentials","topic-agent-skills","topic-cloud-native","topic-cncf","topic-devops","topic-ebpf","topic-hacktoberfest","topic-kubernetes","topic-kubesphere","topic-llm","topic-multi-cluster","topic-multi-tenancy","topic-observability"],"categories":["kubesphere"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kubesphere/kubesphere/kubesphere-devops-credentials","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kubesphere/kubesphere","source_repo":"https://github.com/kubesphere/kubesphere","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 16934 github stars · SKILL.md body (16,511 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:39.048Z","embedding":null,"createdAt":"2026-04-18T21:53:12.975Z","updatedAt":"2026-05-18T18:52:39.048Z","lastSeenAt":"2026-05-18T18:52:39.048Z","tsv":"'/''$':1366,1455 '/*':191,202 '/basic-auth':212,442,522,1015,1317 '/bin/bash':1245 '/credential:':151 '/credentials':282,288,294,301,308,315,329,346,403,475,602,1280 '/credentials/)':1703 '/devopsproject,devops.kubesphere.io/managed=true':1518 '/example/my-app.git':915 '/example/repo.git':775 '/gitrepositories':840,943,1336 '/kapis/devops.kubesphere.io/v1alpha2/namespaces':313 '/kapis/devops.kubesphere.io/v1alpha3/namespaces':280,286,292,299,306,327,344,401,473,600,838,941,1277,1333,1403 '/kubeconfig':221 '/org/k8s-manifests.git':1186,1221 '/org/my-app.git':1043,1106 '/pipelines':1406 '/root/go/src/github.com/kubesphere/kse-extensions/devops/readme.md':1697 '/secret-text':218,639 '/ssh':185 '/ssh-auth':215,389 '/stoneshi-yunify/argocd-example-apps.git':870 '/syncstatus-':1532 '/syncstatus:':156 '/type':370,426,498,625,1304 '/type:':160,1002,1153 '/usage':317,1637 '/v1alpha1':1202 '/v1alpha3':759,854,898,1026,1071,1170,1351,1421 '1':965,980,1129,1261,1524 '102':264 '2':1017,1122,1164,1321 '3':1060,1192,1240,1382 '401/403':1607 'access':75,448,460,465,517,530,572,578,587,985,1266,1591,1619 'actual':565 'agent':651,670,707 'annot':34,153,367,423,495,622,999,1150,1301,1497,1528,1555 'api':17,68,99,272,326,343,400,472,599,620,633,830,837,936,940,1250,1253,1276,1284,1332,1340,1402,1410 'api-token':619 'apivers':132,357,414,486,613,756,851,895,986,1023,1068,1137,1167,1199,1292,1348,1418 'app':584,1033,1209,1428,1445 'appear':1550 'appli':733,893 'applic':752,799,905,928,1056,1124,1195,1204,1377 'application/json':355,412,484,611,849,1290,1346,1416 'argo':1176 'argo-manifest':1175 'argoapp':1215 'argocd':540,751,1123,1194,1617 'auth':164,392,429,445,456,501,511,526,547,1005,1134,1156,1307,1557,1584 'authent':550 'author':331,348,405,477,604,842,945,1282,1338,1408 'autom':1234 'awk':1522 'bash':322,337,394,462,593,831,889,934,1244,1494 'basic':94,163,391,428,444,455,500,525,546,1004,1133,1155,1306,1583 'basic-auth':162,427,454,499,524,545,1003,1132,1154,1305,1582 'bearer':332,349,406,478,605,843,946,1283,1339,1409 'begin':174,376 'best':451 'bitbucket':583,782,812 'branch':968,1064,1088,1091,1116,1386,1395,1437,1440,1467 'break':1639 'build':240 'cannot':235,1618,1628 'case':86 'cat':890 'cd':1646 'chang':1640 'check':1491,1495,1553,1608,1631 'checkout':648,655 'clone':1604 'cluster':105 'code':930,1058 'common':318,1535 'complet':270,972,1241,1480 'connect':739 'content':353,410,482,609,847,1288,1344,1414 'content-typ':352,409,481,608,846,1287,1343,1413 'control':248,252 'correct':1562 'could':244 'creat':56,283,334,390,443,589,827,981,1018,1061,1130,1165,1193,1262,1268,1322,1325,1383,1392,1601 'credenti':4,8,14,21,23,57,64,74,78,82,122,140,228,238,251,278,284,290,295,297,302,304,309,316,321,336,393,592,641,745,787,819,825,960,982,1022,1107,1113,1131,1263,1270,1461,1484,1496,1511,1548,1576,1594,1598,1626,1630,1650,1696,1699 'credential.devops.kubesphere.io':155,159,184,190,201,211,214,217,220,260,369,388,425,441,497,521,624,638,1001,1014,1152,1303,1316,1531 'credential.devops.kubesphere.io/*':189,200 'credential.devops.kubesphere.io/basic-auth':210,440,520,1013,1315 'credential.devops.kubesphere.io/kubeconfig':219 'credential.devops.kubesphere.io/secret-text':216,637 'credential.devops.kubesphere.io/ssh':183 'credential.devops.kubesphere.io/ssh-auth':213,387 'credential.devops.kubesphere.io/syncstatus-':1530 'credential.devops.kubesphere.io/syncstatus:':154 'credential.devops.kubesphere.io/type':368,424,496,623,1302 'credential.devops.kubesphere.io/type:':158,1000,1151 'credentialid':243,1187,1372,1624 'credentialsid':658,678,717,1571,1658,1675 'critic':186,195 'curl':323,338,395,467,594,832,937,1271,1327,1397 'd':356,413,485,612,850,1291,1347,1417 'data':723,728,1664,1681,1686 'delet':303,305,1629 'demo':769,795,860,864,880,883,909,925,958,997,1037,1053,1082,1148,1180,1212,1231,1259 'demo-jenkinsfil':859 'demo-project':768,794,863,879,908,924,957,996,1036,1052,1081,1147,1179,1211,1230,1258 'deploy':63,674,711 'deployment.yaml':735 'descript':797,882,927,1055,1376 'destin':1226 'devop':3,11,20,26,80,129,145,281,287,293,300,307,314,328,345,402,474,601,839,942,1256,1278,1334,1360,1404,1431,1505,1694 'devops.kubesphere.io':150,758,853,897,1025,1070,1169,1350,1420 'devops.kubesphere.io/credential:':149 'devops.kubesphere.io/v1alpha3':757,852,896,1024,1069,1168,1349,1419 'devopscredential_controller.go':262 'direct':1114 'discov':1115,1466,1469 'docker':421,433,437,680,683,686,690,692,695 'docker-password':436 'docker-registri':420,679 'docker-us':432 'e':1247 'echo':689,1267,1324,1391,1478 'end':178,382 'endpoint':273,276,1638 'ensur':1559,1597 'eof':891,931 'etc':783,814 'exact':1573 'exampl':886 'exist':1599 'expir':1612 'export':1248,1252,1255 'extern':71 'f':734,894 'fail':241,1558,1605 'fals':1471 'field':205,562,802 'find':236 'fix':1538 'forc':1508 'found':247,1567,1596 'generic':117 'get':279,289,291,310,312,954,1500,1513,1669,1691 'ghp':513,574,1010,1161 'git':59,90,111,171,374,447,459,504,529,538,549,557,568,647,657,741,778,807,976,984,1008,1100,1101,1159,1310,1371,1449,1450,1460,1564,1579,1590,1603 'git-us':170 'git@github.com':664 'gitea':813 'gitea/forgejo':586 'github':364,493,570,660,777,780,791,810,872,876,917,921,993,1045,1049,1110,1144,1189,1265,1269,1299,1312,1367,1369,1374,1456,1458,1464 'github-ssh-key':363,659 'github-token':492,790,875,920,992,1048,1109,1143,1188,1298,1373,1463 'github.com':774,869,914,1042,1105,1185,1220,1365,1454 'github.com/''$':1364,1453 'github.com/example/my-app.git':913 'github.com/example/repo.git':773 'github.com/org/k8s-manifests.git':1184,1219 'github.com/org/my-app.git':1041,1104 'github.com/stoneshi-yunify/argocd-example-apps.git':868 'github/gitlab':450,464,516 'gitlab':576,781,811 'gitops.kubesphere.io':1201 'gitops.kubesphere.io/v1alpha1':1200 'gitrepositori':736,738,753,761,828,856,900,933,955,961,971,1019,1028,1067,1126,1166,1172,1323,1326,1353,1593,1602,1623 'glpat':581 'glpat-xxxxxxxxxx':580 'groovi':649,668,705,1653 'h':330,347,351,404,408,476,480,603,607,841,845,944,1281,1286,1337,1342,1407,1412 'hasn':1610 'head':1223 'header':1521 'hold':563 'https':537 'id':1108,1462 'ignor':271 'includ':12,46 'io/syncstatus':1507 'issu':76 'item':949 'jenkin':39,234,542,1490,1552,1698 'jenkinsfil':861,1120,1474 'jq':948,1318,1379,1475 'jsonpath':1503 'k8s':713 'key':48,88,177,181,366,379,385,645,662 'kind':134,359,416,488,615,760,855,899,988,1027,1072,1139,1171,1203,1294,1352,1422 'kubeconfig':15,65,103,106,700,720,722,727,729,731,732,1661,1663,1667,1668,1678,1680,1685,1687,1689,1690 'kubeconfigcont':1539,1649,1657 'kubectl':730,888,892,952,953,1498,1512,1527,1666,1688 'kubernet':28,104,126,1488,1645 'kubernetes-cd':1644 'kubernetes.default.svc':1228 'kubespher':2,10,19,25,325,342,399,471,598,836,939,1249,1275,1331,1401,1506 'kubesphere-api':324,341,398,470,597,835,938 'kubesphere-api.example.com':1251 'kubesphere-devops-credenti':1 'kubesphere.io':1517 'kubesphere.io/devopsproject,devops.kubesphere.io/managed=true':1516 'l':1515 'label':32,130,148 'like':534 'line':263 'link':1020 'list':277,320,932 'logic':249 'login':693 'main':798 'manag':7,67 'manifest':1177 'match':1572,1625 'metadata':136,361,418,490,617,762,857,901,990,1029,1074,1141,1173,1205,1296,1354,1424 'metadata.annotations.credential':1504 'metadata.name':950,1320,1381,1477 'method':275 'migrat':77,1652 'mistak':1536,1537 'multi':967,1063,1087,1090,1385,1394,1436,1439 'multi-branch':966,1062,1384,1393 'multi-branch-pipelin':1086,1435 'multibranch':1078,1096 'must':187,198,206 'my-api-token-valu':631 'my-app':1207 'my-app-pipelin':1426,1443 'my-app-repo':1031 'my-application-repo':903 'my-credenti':138 'my-kubeconfig':718,1659,1676 'my-multibranch-pipelin':1076,1094 'my-repo':764,1356 'n':380,381,956,1499,1534 'name':137,362,419,491,618,763,789,816,858,874,902,919,991,1030,1047,1075,1093,1142,1174,1206,1297,1355,1425,1442,1627 'namespac':141,147,767,793,822,862,878,907,923,995,1035,1051,1080,1146,1178,1210,1229,1359,1430,1514 'new':1672 'no-head':1519 'node':1670,1692 'o':1502 'often':556 'old':1655 'one':208 'opaqu':194,224,268 'openssh':175,179,377,383 'oper':274,319 'org/repo.git':665 'overlays/production':1225 'overview':22 'owner':1368,1457 'pass':687,691 'password':97,115,435,438,512,535,561,585,698,1009,1160,1311 'password-stdin':697 'passwordvari':685 'path':1119,1224,1473 'pattern':963,964,1121,1239 'pend':233 'permiss':1616 'person':571,577 'pipelin':43,239,643,650,669,706,749,969,1065,1073,1079,1089,1092,1097,1387,1396,1423,1429,1438,1441,1446,1569,1635 'plugin':1647,1700 'plugins.jenkins.io':1702 'plugins.jenkins.io/credentials/)':1701 'post':285,340,397,469,596,834,1274,1330,1400 'practic':452 'print':1523 'printf':725,1683 'privat':176,180,378,384,975,1620 'privatekey':93,173,375 'project':81,143,146,770,796,865,881,910,926,959,998,1038,1054,1083,1149,1181,1213,1232,1257,1260,1279,1335,1361,1405,1432 'project-xxx':142 'provid':569,776,779,808,871,916,1044 'prune':1235 'put':298 'r':1319,1380,1476 'readm':1695 'refer':785,1112,1693 'referenc':1196 'registri':66,422,681 'remov':1643 'repo':766,906,1021,1034,1358,1370,1459,1621 'repositori':13,60,91,742,800,804,884,977,1198,1378,1390 'repourl':1218 'requir':801,1615 'resourc':120,737 'result':226 'resync':1509 'script':1118,1243,1472 'secret':29,51,87,98,101,102,119,127,135,166,196,255,265,360,417,489,590,616,627,630,784,788,820,826,873,918,989,1046,1140,1295,1501,1529,1565,1587 'secret-text':165,626,1586 'see':261 'selfheal':1237 'server':1227 'servic':72 'set':61,1246 'setup':1242,1479 'sh':688,724,1665,1682 'skill' 'skill-kubesphere-devops-credentials' 'sourc':929,1057,1098,1102,1217,1447,1451 'source-kubesphere' 'spec':771,866,911,1039,1084,1182,1214,1216,1362,1433 'spec.provider':806 'spec.secret.name':815 'spec.secret.namespace':821 'spec.url':803 'specif':31 'ssh':47,89,109,161,335,365,371,644,661,1556 'stage':653,654,672,673,709,710 'start':258 'status':230,1482,1493 'stdin':699 'step':656,667,675,714,979,1016,1059,1128,1163,1191 'store':124 'string':116,703,716,1544,1674 'stringdata':168,372,430,502,629,1006,1157,1308 'structur':121,754 'stuck':231 'success':157 'support':44,544,567 'sync':37,229,1481,1486,1492 'syncpolici':1233 'syncstatus':1554 'tag':1470 'targetrevis':1222 'text':167,591,628,1588 'text/tokens':118 'token':18,52,69,100,333,350,407,449,461,466,479,494,510,518,528,531,566,573,579,588,606,621,634,792,844,877,922,947,994,1050,1111,1136,1145,1190,1254,1285,1300,1313,1341,1375,1411,1465,1580,1592,1609 'topic-agent-skills' 'topic-cloud-native' 'topic-cncf' 'topic-devops' 'topic-ebpf' 'topic-hacktoberfest' 'topic-kubernetes' 'topic-kubesphere' 'topic-llm' 'topic-multi-cluster' 'topic-multi-tenancy' 'topic-observability' 'troubleshoot':73,1483 'true':152,1117,1236,1238,1468 'type':45,83,84,182,192,197,204,223,257,267,354,386,411,439,457,483,519,610,636,704,809,848,1012,1085,1099,1289,1314,1345,1415,1434,1448,1545,1577,1651 'u':694 'updat':296 'url':539,663,772,805,867,912,1040,1103,1183,1363,1452 'usag':311,962 'use':5,41,55,85,188,222,453,533,640,747,1066,1388,1543,1574,1581,1633,1636 'user':172,434,684,696 'user/pass':113 'usernam':92,96,114,169,373,431,503,551,560,1007,1158,1309,1560 'username/pass':110 'username/password':49,95 'usernamepassword':677 'usernamevari':682 'usual':1563 'v1':133,358,415,487,614,987,1138,1293 'v1.1.x':107,1654 'v1.2':1542 'v1.2.x':701,1642,1671 'valu':508,555,635 'variabl':721,1662,1679 'verifi':1570,1622 'via':829,887,935,951 'watch':254 'withcredenti':666,676,715,1547,1656,1673 'work':1541 'workflow':973 'wrong':1575 'x':339,396,468,595,833,1273,1329,1399 'xarg':1525 'xxx':144 'xxxxxxxxxx':514,582 'xxxxxxxxxxxx':575 'xxxxxxxxxxxxxxxxxxxx':1011,1162 'yaml':131,755,978,1127","prices":[{"id":"9529fd33-b507-446b-a0db-60624c76e1e5","listingId":"9d5dc967-ee2a-4a90-82c7-9d4437fad0b0","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kubesphere","category":"kubesphere","install_from":"skills.sh"},"createdAt":"2026-04-18T21:53:12.975Z"}],"sources":[{"listingId":"9d5dc967-ee2a-4a90-82c7-9d4437fad0b0","source":"github","sourceId":"kubesphere/kubesphere/kubesphere-devops-credentials","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-devops-credentials","isPrimary":false,"firstSeenAt":"2026-04-18T21:53:12.975Z","lastSeenAt":"2026-05-18T18:52:39.048Z"}],"details":{"listingId":"9d5dc967-ee2a-4a90-82c7-9d4437fad0b0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"kubesphere-devops-credentials","github":{"repo":"kubesphere/kubesphere","stars":16934,"topics":["agent-skills","ai","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","kubesphere","llm","multi-cluster","multi-tenancy","observability","servicemesh","skills","skills-sh","skillsmp"],"license":"other","html_url":"https://github.com/kubesphere/kubesphere","pushed_at":"2026-05-06T07:16:53Z","description":"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️","skill_md_sha":"523e1f7b085d5acfcb3a4e7540f85ef4fc2e51a5","skill_md_path":"skills/kubesphere-devops-credentials/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-devops-credentials"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"kubesphere-devops-credentials","description":"Use when managing credentials in KubeSphere DevOps, including repository credentials, kubeconfig, and API tokens"},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/kubesphere-devops-credentials"},"updatedAt":"2026-05-18T18:52:39.048Z"}}