jenkins集成kubernetes實現CI/CD工做流

1、在k8s集羣安裝jenkins前端

  • 安裝nfs服務,選擇本身的內網機器,我選擇master1節點(192.168.80.180)

(1)在master1上安裝nfs服務node

yum install nfs-utils -yweb

systemctl start nfsdocker

(2)在master1上建立nfs共享目錄api

mkdir /data/v1 -p瀏覽器

cat /etc/exports網絡

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

exportfs -arv 使配置文件生效ide

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工做流

2、配置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工做流
3、測試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

描述:

上面改好以後選擇肯定便可

3、測試經過Jenkins部署k8s

回到首頁:

新建一個任務------>在任務名稱處輸入jenkins-variable-test-deploy------>流水線------>肯定------>在Pipeline script處輸入以下內容

node('testhan') {

stage('Test') {

  echo "Test Stage"

}
}

應用------>保存------>當即構建便可
打開BlueOcean,出現以下界面
jenkins集成kubernetes實現CI/CD工做流

願與你們共勉之

jenkins集成kubernetes實現CI/CD工做流

相關文章
相關標籤/搜索