{"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\": \"Opaque\"\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\": \"Opaque\"\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\": \"Opaque\"\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\": \"Opaque\"\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 · 16920 github stars · SKILL.md body (16,368 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-03T00:52:29.470Z","embedding":null,"createdAt":"2026-04-18T21:53:12.975Z","updatedAt":"2026-05-03T00:52:29.470Z","lastSeenAt":"2026-05-03T00:52:29.470Z","tsv":"'/''$':1358,1447 '/*':191,202 '/basic-auth':212,518,1009 '/bin/bash':1239 '/credential:':151 '/credentials':282,288,294,301,308,315,329,346,401,471,598,1274 '/credentials/)':1695 '/devopsproject,devops.kubesphere.io/managed=true':1510 '/example/my-app.git':909 '/example/repo.git':769 '/gitrepositories':834,937,1328 '/kapis/devops.kubesphere.io/v1alpha2/namespaces':313 '/kapis/devops.kubesphere.io/v1alpha3/namespaces':280,286,292,299,306,327,344,399,469,596,832,935,1271,1325,1395 '/kubeconfig':221 '/org/k8s-manifests.git':1180,1215 '/org/my-app.git':1037,1100 '/pipelines':1398 '/root/go/src/github.com/kubesphere/kse-extensions/devops/readme.md':1689 '/secret-text':218 '/ssh':185 '/ssh-auth':215 '/stoneshi-yunify/argocd-example-apps.git':864 '/syncstatus-':1524 '/syncstatus:':156 '/type':370,424,494,621,1298 '/type:':160,996,1147 '/usage':317,1629 '/v1alpha1':1196 '/v1alpha3':753,848,892,1020,1065,1164,1343,1413 '1':959,974,1123,1255,1516 '102':264 '2':1011,1116,1158,1313 '3':1054,1186,1234,1374 '401/403':1599 'access':75,444,456,461,513,526,568,574,583,979,1260,1583,1611 'actual':561 'agent':645,664,701 'annot':34,153,367,421,491,618,993,1144,1295,1489,1520,1547 'api':17,68,99,272,326,343,398,468,595,616,629,824,831,930,934,1244,1247,1270,1278,1324,1332,1394,1402 'api-token':615 'apivers':132,357,412,482,609,750,845,889,980,1017,1062,1131,1161,1193,1286,1340,1410 'app':580,1027,1203,1420,1437 'appear':1542 'appli':727,887 'applic':746,793,899,922,1050,1118,1189,1198,1369 'application/json':355,410,480,607,843,1284,1338,1408 'argo':1170 'argo-manifest':1169 'argoapp':1209 'argocd':536,745,1117,1188,1609 'auth':164,390,427,441,452,497,507,522,543,999,1128,1150,1301,1549,1576 'authent':546 'author':331,348,403,473,600,836,939,1276,1330,1400 'autom':1228 'awk':1514 'bash':322,337,392,458,589,825,883,928,1238,1486 'basic':94,163,389,426,440,451,496,521,542,998,1127,1149,1300,1575 'basic-auth':162,425,450,495,520,541,997,1126,1148,1299,1574 'bearer':332,349,404,474,601,837,940,1277,1331,1401 'begin':174,376 'best':447 'bitbucket':579,776,806 'branch':962,1058,1082,1085,1110,1378,1387,1429,1432,1459 'break':1631 'build':240 'cannot':235,1610,1620 'case':86 'cat':884 'cd':1638 'chang':1632 'check':1483,1487,1545,1600,1623 'checkout':642,649 'clone':1596 'cluster':105 'code':924,1052 'common':318,1527 'complet':270,966,1235,1472 'connect':733 'content':353,408,478,605,841,1282,1336,1406 'content-typ':352,407,477,604,840,1281,1335,1405 'control':248,252 'correct':1554 'could':244 'creat':56,283,334,388,439,585,821,975,1012,1055,1124,1159,1187,1256,1262,1314,1317,1375,1384,1593 '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,391,588,635,739,781,813,819,954,976,1016,1101,1107,1125,1257,1264,1453,1476,1488,1503,1540,1568,1586,1590,1618,1622,1642,1688,1691 'credential.devops.kubesphere.io':155,159,184,190,201,211,214,217,220,260,369,423,493,517,620,995,1008,1146,1297,1523 'credential.devops.kubesphere.io/*':189,200 'credential.devops.kubesphere.io/basic-auth':210,516,1007 'credential.devops.kubesphere.io/kubeconfig':219 'credential.devops.kubesphere.io/secret-text':216 'credential.devops.kubesphere.io/ssh':183 'credential.devops.kubesphere.io/ssh-auth':213 'credential.devops.kubesphere.io/syncstatus-':1522 'credential.devops.kubesphere.io/syncstatus:':154 'credential.devops.kubesphere.io/type':368,422,492,619,1296 'credential.devops.kubesphere.io/type:':158,994,1145 'credentialid':243,1181,1364,1616 'credentialsid':652,672,711,1563,1650,1667 'critic':186,195 'curl':323,338,393,463,590,826,931,1265,1319,1389 'd':356,411,481,608,844,1285,1339,1409 'data':717,722,1656,1673,1678 'delet':303,305,1621 'demo':763,789,854,858,874,877,903,919,952,991,1031,1047,1076,1142,1174,1206,1225,1253 'demo-jenkinsfil':853 'demo-project':762,788,857,873,902,918,951,990,1030,1046,1075,1141,1173,1205,1224,1252 'deploy':63,668,705 'deployment.yaml':729 'descript':791,876,921,1049,1368 'destin':1220 'devop':3,11,20,26,80,129,145,281,287,293,300,307,314,328,345,400,470,597,833,936,1250,1272,1326,1352,1396,1423,1497,1686 'devops.kubesphere.io':150,752,847,891,1019,1064,1163,1342,1412 'devops.kubesphere.io/credential:':149 'devops.kubesphere.io/v1alpha3':751,846,890,1018,1063,1162,1341,1411 'devopscredential_controller.go':262 'direct':1108 'discov':1109,1458,1461 'docker':419,431,435,674,677,680,684,686,689 'docker-password':434 'docker-registri':418,673 'docker-us':430 'e':1241 'echo':683,1261,1316,1383,1470 'end':178,382 'endpoint':273,276,1630 'ensur':1551,1589 'eof':885,925 'etc':777,808 'exact':1565 'exampl':880 'exist':1591 'expir':1604 'export':1242,1246,1249 'extern':71 'f':728,888 'fail':241,1550,1597 'fals':1463 'field':205,558,796 'find':236 'fix':1530 'forc':1500 'found':247,1559,1588 'generic':117 'get':279,289,291,310,312,948,1492,1505,1661,1683 'ghp':509,570,1004,1155 'git':59,90,111,171,374,443,455,500,525,534,545,553,564,641,651,735,772,801,970,978,1002,1094,1095,1153,1304,1363,1441,1442,1452,1556,1571,1582,1595 'git-us':170 'git@github.com':658 'gitea':807 'gitea/forgejo':582 'github':364,489,566,654,771,774,785,804,866,870,911,915,987,1039,1043,1104,1138,1183,1259,1263,1293,1306,1359,1361,1366,1448,1450,1456 'github-ssh-key':363,653 'github-token':488,784,869,914,986,1042,1103,1137,1182,1292,1365,1455 'github.com':768,863,908,1036,1099,1179,1214,1357,1446 'github.com/''$':1356,1445 'github.com/example/my-app.git':907 'github.com/example/repo.git':767 'github.com/org/k8s-manifests.git':1178,1213 'github.com/org/my-app.git':1035,1098 'github.com/stoneshi-yunify/argocd-example-apps.git':862 'github/gitlab':446,460,512 'gitlab':572,775,805 'gitops.kubesphere.io':1195 'gitops.kubesphere.io/v1alpha1':1194 'gitrepositori':730,732,747,755,822,850,894,927,949,955,965,1013,1022,1061,1120,1160,1166,1315,1318,1345,1585,1594,1615 'glpat':577 'glpat-xxxxxxxxxx':576 'groovi':643,662,699,1645 'h':330,347,351,402,406,472,476,599,603,835,839,938,1275,1280,1329,1334,1399,1404 'hasn':1602 'head':1217 'header':1513 'hold':559 'https':533 'id':1102,1454 'ignor':271 'includ':12,46 'io/syncstatus':1499 'issu':76 'item':943 'jenkin':39,234,538,1482,1544,1690 'jenkinsfil':855,1114,1466 'jq':942,1310,1371,1467 'jsonpath':1495 'k8s':707 'key':48,88,177,181,366,379,385,639,656 'kind':134,359,414,484,611,754,849,893,982,1021,1066,1133,1165,1197,1288,1344,1414 'kubeconfig':15,65,103,106,694,714,716,721,723,725,726,1653,1655,1659,1660,1670,1672,1677,1679,1681,1682 'kubeconfigcont':1531,1641,1649 'kubectl':724,882,886,946,947,1490,1504,1519,1658,1680 'kubernet':28,104,126,1480,1637 'kubernetes-cd':1636 'kubernetes.default.svc':1222 'kubespher':2,10,19,25,325,342,397,467,594,830,933,1243,1269,1323,1393,1498 'kubesphere-api':324,341,396,466,593,829,932 'kubesphere-api.example.com':1245 'kubesphere-devops-credenti':1 'kubesphere.io':1509 'kubesphere.io/devopsproject,devops.kubesphere.io/managed=true':1508 'l':1507 'label':32,130,148 'like':530 'line':263 'link':1014 'list':277,320,926 'logic':249 'login':687 'main':792 'manag':7,67 'manifest':1171 'match':1564,1617 'metadata':136,361,416,486,613,756,851,895,984,1023,1068,1135,1167,1199,1290,1346,1416 'metadata.annotations.credential':1496 'metadata.name':944,1312,1373,1469 'method':275 'migrat':77,1644 'mistak':1528,1529 'multi':961,1057,1081,1084,1377,1386,1428,1431 'multi-branch':960,1056,1376,1385 'multi-branch-pipelin':1080,1427 'multibranch':1072,1090 'must':187,198,206 'my-api-token-valu':627 'my-app':1201 'my-app-pipelin':1418,1435 'my-app-repo':1025 'my-application-repo':897 'my-credenti':138 'my-kubeconfig':712,1651,1668 'my-multibranch-pipelin':1070,1088 'my-repo':758,1348 'n':380,381,950,1491,1526 'name':137,362,417,487,614,757,783,810,852,868,896,913,985,1024,1041,1069,1087,1136,1168,1200,1291,1347,1417,1434,1619 'namespac':141,147,761,787,816,856,872,901,917,989,1029,1045,1074,1140,1172,1204,1223,1351,1422,1506 'new':1664 'no-head':1511 'node':1662,1684 'o':1494 'often':552 'old':1647 'one':208 'opaqu':194,224,268,387,438,633,1309 'openssh':175,179,377,383 'oper':274,319 'org/repo.git':659 'overlays/production':1219 'overview':22 'owner':1360,1449 'pass':681,685 'password':97,115,433,436,508,531,557,581,692,1003,1154,1305 'password-stdin':691 'passwordvari':679 'path':1113,1218,1465 'pattern':957,958,1115,1233 'pend':233 'permiss':1608 'person':567,573 'pipelin':43,239,637,644,663,700,743,963,1059,1067,1073,1083,1086,1091,1379,1388,1415,1421,1430,1433,1438,1561,1627 'plugin':1639,1692 'plugins.jenkins.io':1694 'plugins.jenkins.io/credentials/)':1693 'post':285,340,395,465,592,828,1268,1322,1392 'practic':448 'print':1515 'printf':719,1675 'privat':176,180,378,384,969,1612 'privatekey':93,173,375 'project':81,143,146,764,790,859,875,904,920,953,992,1032,1048,1077,1143,1175,1207,1226,1251,1254,1273,1327,1353,1397,1424 'project-xxx':142 'provid':565,770,773,802,865,910,1038 'prune':1229 'put':298 'r':1311,1372,1468 'readm':1687 'refer':779,1106,1685 'referenc':1190 'registri':66,420,675 'remov':1635 'repo':760,900,1015,1028,1350,1362,1451,1613 'repositori':13,60,91,736,794,798,878,971,1192,1370,1382 'repourl':1212 'requir':795,1607 'resourc':120,731 'result':226 'resync':1501 'script':1112,1237,1464 'secret':29,51,87,98,101,102,119,127,135,166,196,255,265,360,415,485,586,612,623,626,778,782,814,820,867,912,983,1040,1134,1289,1493,1521,1557,1579 'secret-text':165,622,1578 'see':261 'selfheal':1231 'server':1221 'servic':72 'set':61,1240 'setup':1236,1471 'sh':682,718,1657,1674 'skill' 'skill-kubesphere-devops-credentials' 'sourc':923,1051,1092,1096,1211,1439,1443 'source-kubesphere' 'spec':765,860,905,1033,1078,1176,1208,1210,1354,1425 'spec.provider':800 'spec.secret.name':809 'spec.secret.namespace':815 'spec.url':797 'specif':31 'ssh':47,89,109,161,335,365,371,638,655,1548 'stage':647,648,666,667,703,704 'start':258 'status':230,1474,1485 'stdin':693 'step':650,661,669,708,973,1010,1053,1122,1157,1185 'store':124 'string':116,697,710,1536,1666 'stringdata':168,372,428,498,625,1000,1151,1302 'structur':121,748 'stuck':231 'success':157 'support':44,540,563 'sync':37,229,1473,1478,1484 'syncpolici':1227 'syncstatus':1546 'tag':1462 'targetrevis':1216 'text':167,587,624,1580 'text/tokens':118 'token':18,52,69,100,333,350,405,445,457,462,475,490,506,514,524,527,562,569,575,584,602,617,630,786,838,871,916,941,988,1044,1105,1130,1139,1184,1248,1279,1294,1307,1333,1367,1403,1457,1572,1584,1601 '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,1475 'true':152,1111,1230,1232,1460 'type':45,83,84,182,192,197,204,223,257,267,354,386,409,437,453,479,515,606,632,698,803,842,1006,1079,1093,1283,1308,1337,1407,1426,1440,1537,1569,1643 'u':688 'updat':296 'url':535,657,766,799,861,906,1034,1097,1177,1355,1444 'usag':311,956 'use':5,41,55,85,188,222,449,529,634,741,1060,1380,1535,1566,1573,1625,1628 'user':172,432,678,690 'user/pass':113 'usernam':92,96,114,169,373,429,499,547,556,1001,1152,1303,1552 'username/pass':110 'username/password':49,95 'usernamepassword':671 'usernamevari':676 'usual':1555 'v1':133,358,413,483,610,981,1132,1287 'v1.1.x':107,1646 'v1.2':1534 'v1.2.x':695,1634,1663 'valu':504,551,631 'variabl':715,1654,1671 'verifi':1562,1614 'via':823,881,929,945 'watch':254 'withcredenti':660,670,709,1539,1648,1665 'work':1533 'workflow':967 'wrong':1567 'x':339,394,464,591,827,1267,1321,1391 'xarg':1517 'xxx':144 'xxxxxxxxxx':510,578 'xxxxxxxxxxxx':571 'xxxxxxxxxxxxxxxxxxxx':1005,1156 'yaml':131,749,972,1121","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-03T00:52:29.470Z"}],"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":16920,"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-04-27T06:10:27Z","description":"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️","skill_md_sha":"f05a5ec94d978abc819d4410079f3b9d7032d27d","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-03T00:52:29.470Z"}}