- 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管理
- 1. 郵件配置
- 2. 憑據管理
- 3. 任務測試
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個外掛就好了
- 點選無,取消所有預設選中的外掛
- 安裝git和中文外掛
找不到可以直接在搜尋欄裡面去搜
6.2 配置使用者
外掛裝完之後會讓你建立第一個管理員使用者
6.3 配置外掛下載地址
預設外掛是從國外下載,速度會有些許慢,我們可以講下載地址改為國內
如果你的外掛管理點進去就報錯的話往後看,有解決方法
- 點選系統管理
- 外掛管理
- 高階設定
- 將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/
Jenkins管理
1. 郵件配置
找到系統管理員郵件地址,前面的Jenkins Server是說明,後面尖括號裡面寫入郵箱
滑到最底下會有一個測試傳送郵件
這裡顯示成功傳送就沒有問題了
密碼那個地方並不是填你的郵箱的登入密碼,而是需要去生成一個smtp的授權碼
2. 憑據管理
jenkins的憑據有好幾種
- 賬號密碼
- k8s的serviceAccount
- openShift的賬號密碼
- ssh的使用者名稱密碼
- ssh的使用者名稱和私鑰
因為Jenkins後期肯定是需要跟gitlab去做互動的,所以我們在這裡新增一個gitlab使用者的憑據
test使用者需要在gitlab上存在
3. 任務測試
我們只是做個測試,選擇自由風格的軟體,名稱隨意
然後往下滑找到點選使用git
畫框的地方如果報錯的話,選擇一下憑據之後報錯就沒了,前提是gitlab上存在這個使用者,在這個高階裡面可以指定分支
繼續往下滑找到Build Step,新建一個shell型別的
我們點選儲存,然後開始執行
jenkins就配置好了