## 实现 Jenkins on K8s

### 1. 操作流程:

| 步骤 | 操作 |
| --- | --- |
| 1 | 在 K8s 集群中创建一个 Namespace 来运行 Jenkins |
| 2 | 部署 Jenkins 到 K8s 集群 |
| 3 | 访问 Jenkins 控制台 |
| 4 | 配置 Jenkins 与 K8s 的集成 |
| 5 | 创建一个 Jenkins Job 以在 K8s 上构建和部署应用 |

### 2. 具体操作步骤及代码示例:

#### 步骤 1: 创建一个 Namespace

在命令行使用 kubectl 创建一个 Namespace,用于运行 Jenkins。

```bash
kubectl create namespace jenkins
```

#### 步骤 2: 部署 Jenkins

创建一个 Jenkins 配置文件 `jenkins.yaml`,包含 Deployment 和 Service 对象。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: jenkins
spec:
selector:
app: jenkins
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
```

使用 kubectl 应用该配置文件来部署 Jenkins。

```bash
kubectl apply -f jenkins.yaml
```

#### 步骤 3: 访问 Jenkins 控制台

查看 Jenkins 服务的外部 IP 地址,访问该 IP 地址的 8080 端口,输入初始密码进行初始化设置。

```bash
kubectl get svc -n jenkins
```

#### 步骤 4: 配置 Jenkins 与 K8s 集成

在 Jenkins 控制台安装并配置 Kubernetes 插件,添加 K8s 集群的配置信息。

```bash
kubectl create serviceaccount jenkins-sa -n jenkins

kubectl create clusterrolebinding jenkins-sa \
--serviceaccount=jenkins:jenkins-sa \
--clusterrole=cluster-admin

kubectl get secret $(kubectl get serviceaccount jenkins-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode

kubectl get nodes -o wide
```

#### 步骤 5: 创建 Jenkins Job

在 Jenkins 控制台创建一个 Pipeline Job,使用 Jenkinsfile 以在 K8s 上构建和部署应用。

```groovy
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Building..."'
}
}
stage('Deploy') {
steps {
sh 'echo "Deploying..."'
// 使用 kubectl 部署应用
sh 'kubectl apply -f deployment.yaml'
}
}
}
}
```

以上就是实现 Jenkins on K8s 的整个流程及详细操作步骤。希望以上内容能帮助你成功搭建 Jenkins 在 K8s 上,并实现持续集成和持续部署。