Use when working with KubeSphere DevOps extension, CI/CD pipelines, Jenkins integration, or pipeline troubleshooting
59
68%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
Fix and improve this skill with Tessl
tessl review fix ./skills/kubesphere-devops-overview/SKILL.mdKubeSphere DevOps provides CI/CD capabilities through Jenkins integration, supporting both graphical pipeline editing and Jenkinsfile-based pipelines. It enables automated builds, testing, and deployments across multi-cluster environments with ArgoCD integration for GitOps continuous deployment.
KubeSphere DevOps maps resources across three layers:
KubeSphere Kubernetes Jenkins
─────────────────────────────────────────────────────────────
Workspace Workspace CR (authorization)
└── DevOpsProject ├── DevOpsProject CR └── Folder
(Namespace) └── Namespace (with label)
└── Pipeline ├── Pipeline CR └── WorkflowJob
└── Run ├── PipelineRun CR └── Build #NKey Concept: A "DevOps Project" in KubeSphere is fundamentally a Kubernetes namespace with the devops.kubesphere.io/managed=true label. The DevOpsProject CR exists as a wrapper resource, but when querying for accessible DevOps projects, you interact with namespaces, not the DevOpsProject CRs directly.
For tenants: Use the /kapis/devops.kubesphere.io/v1alpha3/workspaces/{workspace}/namespaces endpoint to list accessible DevOps projects (returns namespace resources). The /apis/devops.kubesphere.io/v1alpha3/devopsprojects endpoint requires cluster-scoped permissions and returns 403 for tenants.
DevOps projects have two forms of names:
| Name Type | Example | Source | Usage |
|---|---|---|---|
| Shortname | devopstest | .metadata.generateName in DevOpsProject CR | Display/user-friendly name |
| Fullname | devopstestc2nj7 | .metadata.name in DevOpsProject CR and Namespace | Actual resource identifier |
Important:
devopstestc2nj7)devopstest, KubeSphere generates a unique fullname by appending random charactersDevOpsProjects belong to a Workspace via label:
apiVersion: devops.kubesphere.io/v1alpha3
kind: DevOpsProject
metadata:
name: my-project
labels:
kubesphere.io/workspace: demo # Associates with Workspace 'demo'To create and associate:
# 1. Create Workspace
kubectl apply -f - <<EOF
apiVersion: tenant.kubesphere.io/v1beta1
kind: Workspace
metadata:
name: demo
EOF
# 2. Create DevOpsProject with label
kubectl apply -f - <<EOF
apiVersion: devops.kubesphere.io/v1alpha3
kind: DevOpsProject
metadata:
name: my-project
labels:
kubesphere.io/workspace: demo
EOF┌──────────────────────────────────────────────────────────────┐
│ DevOps Project │
│ (Namespace with devops.kubesphere.io/managed=true label) │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐
│ Pipelines │ │Credentials│ │ Webhooks │
│ │ │ │ │ │
│ - Graphical │ │ - SSH │ │ - GitHub │
│ - Jenkinsfile│ │ - Basic │ │ - GitLab │
│ - Multi-branch│ │ - Token │ │ - Generic │
└──────────────┘ └───────────┘ └─────────────┘Minimal Installation (Default Config) - RECOMMENDED:
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: devops
namespace: kubesphere-system
spec:
extension:
name: devops
version: 1.2.4
enabled: true
upgradeStrategy: Manual # Required for production
# Note: spec.config is omitted to use extension default valuesWhen to use minimal installation:
Custom Configuration (Only When Needed):
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: devops
namespace: kubesphere-system
spec:
extension:
name: devops
version: 1.2.4
enabled: true
upgradeStrategy: Manual # Required for production
# config: leave empty to use default valuesCustom Configuration (Override Defaults):
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: devops
namespace: kubesphere-system
spec:
extension:
name: devops
version: 1.2.4
enabled: true
upgradeStrategy: Manual # Required for production
config: |
# Overrides values from DevOps chart's values.yaml
agent:
jenkins:
Master:
NodeSelector: {}
resources:
requests:
cpu: "500m"
memory: "4Gi"
limits:
cpu: "2000m"
memory: "8Gi"
Agent:
Image: "jenkins/inbound-agent"
Tag: "3309.v27b_9314fd1a_4-1-jdk21"
Privileged: falseImportant:
upgradeStrategy: Manual for productionconfig is optional - omit or leave empty to use extension defaultsvalues.yaml settingsTo install DevOps agent on member clusters, add clusterScheduling:
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: devops
namespace: kubesphere-system
spec:
extension:
name: devops
version: 1.2.4
enabled: true
upgradeStrategy: Manual
config: |
# Base config for all clusters
agent:
jenkins:
Master:
resources:
requests:
cpu: "500m"
memory: "4Gi"
clusterScheduling:
placement:
clusters:
- host # Install on host cluster
- member1 # Install on member1
- member2 # Install on member2
# Optional: per-cluster overrides
overrides:
member1: |
agent:
jenkins:
Master:
resources:
limits:
memory: "8Gi" # Larger master for member1
member2: |
agent:
jenkins:
Agent:
NodeSelector:
zone: westKey Points:
clusterScheduling.placement.clusters: List clusters where DevOps agent runsclusterScheduling.overrides: Cluster-specific config overridesclusterScheduling, DevOps only runs on the host clusterhelm upgrade --install devops kse-extensions/devops \
-n kubesphere-devops-system \
--create-namespaceVerify the DevOps installation:
# Check DevOps pods
kubectl get pods -n kubesphere-devops-system
# Check InstallPlan status
kubectl get installplan devops -n kubesphere-system
# For multi-cluster: check agent status on each cluster
kubectl get installplan devops -n kubesphere-system -o jsonpath='{.status.clusterSchedulingStatuses}'| Component | Purpose | Namespace |
|---|---|---|
| devops-jenkins | Jenkins master | kubesphere-devops-system |
| devops-apiserver | DevOps API service | kubesphere-devops-system |
| devops-controller | Resource controllers | kubesphere-devops-system |
| devops-argocd-* | ArgoCD (GitOps) | argocd |
| Jenkins Agent | Pipeline executors | Dynamic (per pipeline) |
| ----------- | --------- | ----------- |
| devops-jenkins | Jenkins master | kubesphere-devops-system |
| devops-apiserver | DevOps API service | kubesphere-devops-system |
| devops-controller | Resource controllers | kubesphere-devops-system |
| Jenkins Agent | Pipeline executors | Dynamic (per pipeline) |
KubeSphere DevOps integrates with Jenkins for CI/CD execution. The secret devops-jenkins contains the admin token for direct Jenkins access:
# Get Jenkins admin token
TOKEN=$(kubectl -n kubesphere-devops-system get secret devops-jenkins -o jsonpath='{.data.jenkins-admin-token}' | base64 -d)
# Access Jenkins API
kubectl run curl-jenkins --rm -i --restart=Never --image=curlimages/curl \
-- "http://admin:${TOKEN}@devops-jenkins.kubesphere-devops-system:80/api/json"Jenkins NodePort:
kubectl get svc devops-jenkins -n kubesphere-devops-system
# Default: 30180Access Jenkins Console:
http://<node-ip>:30180adminKubeSphere DevOps includes ArgoCD v2.11.7 for GitOps continuous deployment:
ArgoCD Components:
| Component | Purpose |
|---|---|
| application-controller | Manages Application state |
| applicationset-controller | Manages ApplicationSet resources |
| dex-server | SSO authentication |
| notifications-controller | Event notifications |
| repo-server | Repository operations |
| argocd-server | API/UI server |
| redis | Cache layer |
Access ArgoCD:
# Get ArgoCD server URL
kubectl get svc devops-agent-argocd-server -n argocd
# Get admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -dKey Features:
| Resource | API Version | Purpose |
|---|---|---|
| Pipeline | devops.kubesphere.io/v1alpha3 | CI/CD pipeline definition |
| DevOpsProject | devops.kubesphere.io/v1alpha3 | DevOps project (namespace wrapper) |
| Credential | v1/Secret | Repository and deployment credentials |
# List DevOps projects
kubectl get devopsprojects
# List pipelines in a project
kubectl get pipelines -n <devops-project-namespace>
# Get pipeline runs
kubectl get pipelineruns -n <devops-project-namespace>
# Check Jenkins status
kubectl -n kubesphere-devops-system get pods -l app=devops-jenkins
# View Jenkins logs
kubectl -n kubesphere-devops-system logs -l app=devops-jenkins
# Get Jenkins admin password
kubectl -n kubesphere-devops-system get secret devops-jenkins -o jsonpath='{.data.jenkins-admin-password}' | base64 -d| Type | Description | Use Case |
|---|---|---|
| Graphical | Visual pipeline editor | Simple pipelines, no code |
| Jenkinsfile (SCM) | Pipeline defined in repository | Version-controlled pipelines |
| Jenkinsfile (Inline) | Pipeline defined in KubeSphere | Quick testing |
| Multi-branch | Auto-discovers branches | GitFlow, feature branches |
| Mistake | Fix |
|---|---|
| Pipeline fails with "No agent" | Check Jenkins agent configuration |
| Cannot access Git repository | Verify credentials and webhook setup |
| kubeconfig credentials fail | Use string type instead of kubeconfigContent (v1.2+) |
| Jenkins out of memory | Increase Jenkins master resources |
| Pipeline hangs | Check agent pod status and resource limits |
| DevOps | Jenkins | Notes |
|---|---|---|
| v1.2.x | 2.504.1 LTS | kubernetes-cd plugin removed |
| v1.1.x | 2.346.3 LTS | Legacy kubeconfigContent supported |
04a29b5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.