Jenkins部署

FuShudi發表於2024-06-22

目錄
  • Jenkins部署
    • 1. 建立sa
    • 2. 建立pvc
    • 3. 建立deployment
    • 4. 建立service
    • 5. 登入jenkins
    • 6. 簡單配置jenkins
      • 6.1 安裝外掛
      • 6.2 配置使用者
      • 6.3 配置外掛下載地址
        • 6.3.1 頁面操作
        • 6.3.2 容器操作
        • 6.3.3 重啟jenkins
        • 6.3.4 安裝外掛
        • 6.3.5 常用外掛

Jenkins部署

CI/CD工具

  • jenkins:能做CI,也能做CD 語法 groovy
  • gitlab-ci:執行器叫做gitlab-runner,流水線語法 yaml
  • tekton:CI工具,CNCF,在k8s中執行pod來實現流水線 ,語法 yaml
  • argo-cd:CD工具,在k8s中部署應用,語法:kustomize
  • argo-workflow:CI工具,在k8s中透過執行pod實現流水線,語法:yaml

1. 建立sa

sa就是service account

[root@master ~]# mkdir jenkins
[root@master ~]# cd jenkins
[root@master jenkins]# kubectl create ns devops
[root@master jenkins]# vim jenkins-sa.yaml
namespace/devops created
metadata:
  name: jenkins-admin
rules:
  - apiGroups: [""]
    resources: ["*"]
    verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin
  namespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins-admin
subjects:
- kind: ServiceAccount
  name: jenkins-admin
  namespace: devops

一定要先建立devops,如果你想部署在預設的名稱空間下也是可以的,那就可以不建立的vops名稱空間了

[root@master jenkins]# kubectl apply -f jenkins-sa.yaml 
clusterrole.rbac.authorization.k8s.io/jenkins-admin created
serviceaccount/jenkins-admin created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-admin created

2. 建立pvc

直接建立pvc而沒有建立pv是因為我採用的動態製備

[root@master jenkins]# vim jenkins-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins
  namespace: devops
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
      
[root@master jenkins]# kubectl apply -f jenkins-pvc.yaml 

檢視一下pvc是否建立好了

[root@master jenkins]# kubectl get pvc -n devops
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jenkins   Bound    pvc-131cc674-c33a-4d48-9a6a-e562374d4e0c   10Gi        RWO            csi-rbd-sc     7s

如果配置了動態製備而這裡還是pending的話看一下sc是否設定為預設

3. 建立deployment

檔案內容比較多

vim jenkins-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: jenkins-server
  name: jenkins-server
  namespace: devops
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: jenkins-server
    spec:
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
            claimName: jenkins
      serviceAccountName: jenkins-admin
      containers:
      - image: jenkins/jenkins
        imagePullPolicy: IfNotPresent
        name: jenkins
        securityContext:
          runAsUser: 0
        volumeMounts:
          - name: jenkins-data
            mountPath: /var/jenkins_home
        livenessProbe:
          httpGet:
            path: "/login"
            port: 8080
          initialDelaySeconds: 90
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: "/login"
            port: 8080
          initialDelaySeconds: 90
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 3
        ports:
          - name: http
            containerPort: 8080
          - name: tcp
            containerPort: 50000
        resources: 
          limits:
            memory: "2Gi"
            cpu: "1"
          requests:
            memory: "500Mi"
            cpu: "0.5"
status: {}

建立deployment

[root@master jenkins]# kubectl apply -f jenkins-deoloy.yaml 
deployment.apps/jenkins-server created
[root@master jenkins]# kubectl get pods -n devops
NAME                              READY   STATUS             RESTARTS       AGE
jenkins-server-5db58f78dc-jqcqt   0/1     Running            0              34s

這裡等待這個pod就緒就好了,因為是java程序,所以啟動的有點慢

4. 建立service

[root@master jenkins]# vim jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
  namespace: devops
spec:
  selector:
    app: jenkins-server
  type: NodePort
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 32000
    - name: agent
      port: 50000
      targetPort: 50000
[root@master jenkins]# kubectl apply -f jenkins-svc.yaml 
service/jenkins-svc created

5. 登入jenkins

等待jenkins就緒之後就可以透過nodePort對映出來的32000埠來進行訪問了

然後進入容器檢視初始密碼

[root@master jenkins]# kubectl exec -it -n devops jenkins-server-5db58f78dc-jqcqt -- bash
root@jenkins-server-5db58f78dc-jqcqt:/# cat /var/jenkins_home/secrets/initialAdminPassword

15953b138edd4f68a434c31603455a4e

輸出的這一串就是密碼了,拿著這個密碼去登入

6. 簡單配置jenkins

6.1 安裝外掛

我們登入之後會讓我們安裝外掛,這個時候不要點選安裝推薦的外掛,因為他推薦的外掛非常多,下載起來很慢的

我們現在安裝2個外掛就好了

  1. 點選無,取消所有預設選中的外掛
  2. 安裝git和中文外掛

找不到可以直接在搜尋欄裡面去搜

6.2 配置使用者

外掛裝完之後會讓你建立第一個管理員使用者

6.3 配置外掛下載地址

預設外掛是從國外下載,速度會有些許慢,我們可以講下載地址改為國內

如果你的外掛管理點進去就報錯的話往後看,有解決方法

  1. 點選系統管理
  2. 外掛管理
  3. 高階設定
  4. 將updateSite(升級站點)改為清華的源

6.3.1 頁面操作

然後往下滑,最下面這裡,如果你是英文就是UpdateSite

6.3.2 容器操作

在頁面上改完之後還需要到容器內修改一個配置檔案

[root@master jenkins]# kubectl exec -it  -n devops jenkins-server-55cfc6dbd8-dmpn8  -- bash 
# 進入jenkins的家目錄
root@jenkins-server-55cfc6dbd8-dmpn8:/# cd /var/jenkins_home/updates/
root@jenkins-server-55cfc6dbd8-dmpn8:/var/jenkins_home/updates# ls
default.json  hudson.tasks.Maven.MavenInstaller

修改這個default.json

root@jenkins-server-55cfc6dbd8-dmpn8:/var/jenkins_home/updates# sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

6.3.3 重啟jenkins

重啟的話直接在url輸入restart

等他重啟完之後再進去外掛管理的頁面就可以正常的下載外掛了

6.3.4 安裝外掛

按照自己的場景選擇外掛,我這裡選擇

  • git
  • 中文外掛
  • kubernetes
  • pipeline

安裝完外掛之後是需要重啟jenkins的,所以建議一次性安裝完

6.3.5 常用外掛

  • Git 拉取程式碼

  • SSH SSH 遠端執行

  • Publish Over SSH

  • Gitlab gitlab外掛

  • Maven 對 Maven 專案構建

  • NodeJs 對 NodeJs 專案構建

  • DingTalk 釘釘通知

  • Pipeline 流水線

  • Kubernetes 動態建立代理

  • simple theme 主題

  • Git Parameter 動態從 git 中獲取所有分支

  • Managed Scripts 管理指令碼外掛

  • Deploy to container 熱部署外掛

  • Extended Choice Parameter 擴充套件引數構建

  • Role-based Authorization Strategy 許可權管理

  • Localization: Chinese (Simplified) 簡體中文

  • ansiColor 設定顏色

  • Conditional BuildStep 在pipeline中使用when

  • HTTP Request Plugin:執行http請求並返回響應體,詳細用法: https://www.jenkins.io/doc/pipeline/steps/http_request/

  • Pipeline Utility Steps:pipeline中常用的一些工具集,如壓縮與解壓縮、建立檔案、查詢檔案等;詳細用法: https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/

相關文章