jenkins集成kubernetes实现CI/CD工作流

一、在k8s集群安装jenkins

  • 安装nfs服务,选择自己的内网机器,我选择master1节点(192.168.80.180)

(1)在master1上安装nfs服务

yum install nfs-utils -y

systemctl start nfs

(2)在master1上创建nfs共享目录

mkdir /data/v1 -p

cat /etc/exports

/data/v1 192.168.80.0/24(rw,no_root_squash)

exportfs -arv 使配置文件生效

systemctl restart nfs

  • kubernetes中部署jenkins

(1)创建名称空间

kubectl create namespace jenkins-k8s

(2)创建pv

cat pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: jenkins-k8s-pv

spec:

capacity:

storage: 10Gi

accessModes:

  • ReadWriteMany

    nfs:

    server: 192.168.80.180

    path: /data/v1
    kubectl apply -f pv.yaml

(3)创建pvc

cat pvc.yaml
kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: jenkins-k8s-pvc

namespace: jenkins-k8s

spec:

resources:

requests:

  storage: 10Gi

accessModes:

- ReadWriteMany

查看pvc和pv绑定状态

kubectl get pvc -n jenkins-k8s
jenkins集成kubernetes实现CI/CD工作流
(4)创建sa账号

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

(5)把sa账号做rbac授权

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

(6)通过deployment部署jenkins

cat jenkins-deployment.yaml
kind: Deployment

apiVersion: apps/v1

metadata:

name: jenkins

namespace: jenkins-k8s

spec:

replicas: 1

selector:

matchLabels:

  app: jenkins

template:

metadata:

  labels:

    app: jenkins

spec:

  serviceAccount: jenkins-k8s-sa

  containers:

  - name: jenkins

    image: jenkins/jenkins:lts

    imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

      name: web

      protocol: TCP

    - containerPort: 50000

      name: agent

      protocol: TCP

    resources:

      limits:

        cpu: 1000m

        memory: 1Gi

      requests:

        cpu: 500m

        memory: 512Mi

    livenessProbe:

      httpGet:

        path: /login

        port: 8080

      initialDelaySeconds: 60

      timeoutSeconds: 5

      failureThreshold: 12

    readinessProbe:

      httpGet:

        path: /login

        port: 8080

      initialDelaySeconds: 60

      timeoutSeconds: 5

      failureThreshold: 12

    volumeMounts:

    - name: jenkins-volume

      subPath: jenkins-home

      mountPath: /var/jenkins_home

  volumes:

  - name: jenkins-volume

    persistentVolumeClaim:

      claimName: jenkins-k8s-pvc

chown -R 1000 /data/v1

kubectl apply -f jenkins-deployment.yaml

kubectl get pods -n jenkins-k8s
jenkins集成kubernetes实现CI/CD工作流
(7)把jenkins前端加上service,提供外部网络访问

cat jenkins-service.yaml
apiVersion: v1

kind: Service

metadata:

name: jenkins-service

namespace: jenkins-k8s

labels:

app: jenkins

spec:

selector:

app: jenkins

type: NodePort

ports:

  • name: web

    port: 8080

    targetPort: web

    nodePort: 30002

  • name: agent

    port: 50000

    targetPort: agent
    kubectl apply -f jenkins-service.yaml

kubectl get svc -n jenkins-k8s
jenkins集成kubernetes实现CI/CD工作流

二、配置Jenkins

在浏览器访问jenkins的web界面:

http://192.168.80.199:30002/login?from=%2F
jenkins集成kubernetes实现CI/CD工作流

  • 获取管理员密码:

在nfs服务端,也就是master1节点获取密码:

cat /data/v1/jenkins-home/secrets/initialAdminPassword
jenkins集成kubernetes实现CI/CD工作流
把上面获取到的密码拷贝到上面管理员密码下的方框里
jenkins集成kubernetes实现CI/CD工作流
点击继续,出现如下界面
jenkins集成kubernetes实现CI/CD工作流

  • 安装插件

安装插件
jenkins集成kubernetes实现CI/CD工作流
插件安装好之后显示如下:
jenkins集成kubernetes实现CI/CD工作流

  • 创建管理员用户
    jenkins集成kubernetes实现CI/CD工作流
    用户名和密码都设置成admin,线上环境需要设置成复杂的密码

修改好之后点击保存并完成,出现如下界面

点击保存并完成,出现如下界面
jenkins集成kubernetes实现CI/CD工作流
点击保存并完成,出现如下界面
jenkins集成kubernetes实现CI/CD工作流
三、测试jenkins的CI/CD

  • 在Jenkins中安装kubernetes插件

(1)在jenkins中安装k8s插件

Manage Jnekins------>Manage Plugins------>可选插件------>搜索kubernetes------>出现如下
jenkins集成kubernetes实现CI/CD工作流

选中kubernetes之后------>点击下面的直接安装------>安装之后选择重新启动jenkins--->重启之后登陆jenkins即可

  • 配置jenkins连接到我们存在的k8s集群

(1)点击系统管理->系统设置-新增一个云,在下拉菜单中选择kubernets并添加
jenkins集成kubernetes实现CI/CD工作流
(2)填写云kubernetes配置内容
jenkins集成kubernetes实现CI/CD工作流

(3)测试jenkins和k8s是否可以通信
jenkins集成kubernetes实现CI/CD工作流
点击连接测试,如果显示Connection test successful,说明测试成功,Jenkins可以和k8s进行通信

应用------>保存

  • 配置pod-template

(1)配置pod template

系统管理------>系统设置------>添加Pod模板------>Kubernetes Pod Template--->按如下配置

jenkins集成kubernetes实现CI/CD工作流
(2)在上面的pod template下添加容器

添加容器------>Container Template------>按如下配置------>
jenkins集成kubernetes实现CI/CD工作流

在pod template右下脚有一个Advanced,点击Advanced,出现如下

jenkins集成kubernetes实现CI/CD工作流
在Service Account处输入jenkins-k8s-sa,这个sa就是我们开始安装jenkins时的sa

(3)给上面的pod template添加卷

添加卷------>选择Host Path Volume
jenkins集成kubernetes实现CI/CD工作流

上面配置好之后,应用------>保存

  • 添加自己的dockerhub凭据

首页------>凭据------>点击Stores scoped to Jenkins下的jenkins,显示如下----->
jenkins集成kubernetes实现CI/CD工作流
点击这个全局凭据,出现如下------>
jenkins集成kubernetes实现CI/CD工作流
username:xianchao

password:1989*****

ID:dockerhub

描述:

上面改好之后选择确定即可

三、测试通过Jenkins部署k8s

回到首页:

新建一个任务------>在任务名称处输入jenkins-variable-test-deploy------>流水线------>确定------>在Pipeline script处输入如下内容

node('testhan') {

stage('Test') {

  echo "Test Stage"

}
}

应用------>保存------>立即构建即可
打开BlueOcean,出现如下界面
jenkins集成kubernetes实现CI/CD工作流

愿与大家共勉之

jenkins集成kubernetes实现CI/CD工作流

猜你喜欢

转载自blog.51cto.com/12974849/2429873