基於Kubernetes/K8S構建Jenkins持續整合平臺(下)

隱姓埋名4869發表於2022-03-08

基於Kubernetes/K8S構建Jenkins持續整合平臺(下)

 

Jenkins-Master-Slave架構圖回顧:

 

 

安裝和配置NFS

NFS簡介

NFS(Network File System),它最大的功能就是可以通過網路,讓不同的機器、不同的作業系統可以共享彼此的檔案。我們可以利用NFS共享Jenkins執行的配置檔案、Maven的倉庫依賴檔案等

NFS安裝

我們把NFS伺服器安裝在20.0.0.10機器上

安裝NFS服務(在所有K8S的節點都需要安裝)

yum install -y nfs-utils

  

建立共享目錄

mkdir -p /opt/nfs/jenkins
vi /etc/exports	#編寫NFS的共享配置
#內容如下:		
/opt/nfs/jenkins	*(rw,no_root_squash)	*代表對所有IP都開放此目錄,rw是讀寫

  

啟動服務

 

systemctl enable nfs	開機啟動
systemctl start nfs	啟動

 

  

檢視NFS共享目錄

 

showmount -e 20.0.0.10

  

 

Kubernetes安裝Jenkins-Master

建立NFS client provisioner

nfs-client-provisioner 是一個Kubernetes的簡易NFS的外部provisioner,本身不提供NFS,需要現有的NFS伺服器提供儲存。

 

上傳nfs-client-provisioner構建檔案

其中注意修改deployment.yaml,使用之前配置NFS伺服器和目錄

 

 

 

 

 

構建nfs-client-provisionerpod資源

 

cd nfs-client 
kubectl create -f .

  

檢視pod是否建立成功

kubectl get pods

  

Jenkins-Master

上傳Jenkins-Master構建檔案

 

 

 

建立kube-ops的namespace

因為我們把Jenkins-Master的pod放到kube-ops下

kubectl create namespace kube-ops

  

構建Jenkins-Masterpod資源

 

cd jenkins-master
kubectl create -f .

 

  

檢視pod是否建立成功

kubectl get pods -n kube-ops

  

檢視資訊,並訪問

檢視Pod執行在那個Node上

kubectl describe pods -n kube-ops

 

檢視分配的埠

 

然後去訪問:http://20.0.0.70:31087/ 20.0.0.70k8s-node1IP

 

 

 

看到這個頁面就很簡單了!

找到金鑰複製進去登入:

 

 

進去後就建立一個管理員使用者都是老生常談的操作了就不多說了

然後就實現的介面了!

 

然後繼續下面的操作!

 

 

設定外掛下載地址:

cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-e90ef63e-5bf2-4747-a9b3-e8fe13ae21cf/updates  
sed -i 's/http:\/\/updates.jenkins- ci.org\/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

Manage Plugins點選Advanced,把Update Site改為

國內外掛下載地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 

 

先安裝基本的外掛:“

  1. Localization:Chinese
  2. Git
  3. Pipeline
  4. Extended Choice Parameter

還有一個jenkins與k8s整合的外掛:

  1. kubernetes

 

重啟Jenkins

 

 

 

實現JenkinsKubernetes整合

系統管理->系統配置->雲->新建雲->Kubernetes

 

 

kubernetes 地 址 採 用 了 kube 的 服 務 器 發 現 :https://kubernetes.default.svc.cluster.local 

namespace填kube-ops,然後點選Test Connection,如果出現 Connection test successful 的提示資訊證明 Jenkins 已經可以和 Kubernetes 系統正常通訊

Jenkins URL 地址:http://jenkins.kube-ops.svc.cluster.local:8080

  

構建Jenkins-Slave自定義映象

Jenkins-Master在構建Job的時候,Kubernetes會建立Jenkins-Slave的Pod來完成Job的構建。我們選擇  執行Jenkins-Slave的映象為官方推薦映象:jenkins/jnlp-slave:latest,但是這個映象裡面並沒有Maven    環境,為了方便使用,我們需要自定義一個新的映象:

準備材料:

Dockerfile檔案內容如下:

 

FROM jenkins/jnlp-slave:latest

MAINTAINER lvbu

# 切換到 root 賬戶進行操作
USER root

# 安裝 maven
COPY apache-maven-3.6.2-bin.tar.gz .

RUN tar -zxf apache-maven-3.6.2-bin.tar.gz && \
    mv apache-maven-3.6.2 /usr/local && \
    rm -f apache-maven-3.6.2-bin.tar.gz && \
    ln -s /usr/local/apache-maven-3.6.2/bin/mvn /usr/bin/mvn && \
    ln -s /usr/local/apache-maven-3.6.2 /usr/local/apache-maven && \
    mkdir -p /usr/local/apache-maven/repo

COPY settings.xml /usr/local/apache-maven/conf/settings.xml

USER jenkins

 

  

 

然後構建映象:然後檢視

docker build -t jenkins-slave-maven:latest .

 

下面要做的就是修改指向harbor:K8s三臺都要做

 

然後k8s master登入harbor:

docker login -u admin -p Harbor20.0.0.50:85
docker tag jenkins-slave-maven:latest 20.0.0.50:85/library/jenkins-slave-maven:latest
docker push 20.0.0.50:85/library/jenkins-slave-maven:latest

 

 

 

測試Jenkins-Slave是否可以建立

建立一個Jenkins流水線專案

 

新增憑據:

 

編寫Pipeline,從GItlab拉取程式碼(使用http方式)使用流水線片段生成器 

def git_address = "http://20.0.0.20:82/root/tensquare_back.git" 
def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96"

//建立一個Pod的模板,label為jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [ 
    containerTemplate(
        name: 'jnlp',
        image: "20.0.0.50:85/library/jenkins-slave-maven:latest"
    )
  ]
)
{
    //引用jenkins-slave的pod模組來構建Jenkins-Slave的pod 
    node("jenkins-slave"){
        stage('拉取程式碼'){
            checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
        }
    }
}

 

  

然後開始構建:

 

 

 

在構建前再開一臺jenkins去看節點列表,初始狀態是,一個主節點!然後構建的時候重新整理會看到從節點上線構建,構建完就會自動下線釋放資源

主節點不參與構建

 

 

 

相關文章