RHEL8安裝Jenkins串接K8S為Agent2
接著實作部分其實是參考YT的介紹來跑:
首先要先取得OCP的API Server的URL位置,後面會用到:
#直接在OCP的堡壘機拿到該資訊,執行以下指令:
oc cluster-info#亦或是用kubectl:
kubectl cluster-info
或是在前面拿到的config檔內看到位置:
#展開SA(ServiceAccount)的身分檔,看到該內容,例如在Jenkins Container內:
cat ~/.kube/config
往下會看到:
總之拿到上面紅框的URL位置,等等會用到!
替Jenkins安裝kubernetes插件:
我這邊順便嘗試安裝並且重啟:
畫面會立刻看到:
這邊赫然發現這樣安排重啟後,上面的畫面不會重載,就卡在那邊
仔細查看然後發現Jenkins Container會直接消失:
一樣重啟該Container:
#執行以下指令重新建立Jenkins的Container:
sudo podman run -p 8080:8080 -p 50000:50000 -d \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
在上面重建完Jenkins後,Web才會自己載入:
登入後確認:
接著就是做相關的設置用以串接K8S平台(這邊用的是OCP)
首先要先把Jenkins本身Controller設置成不要跑任何Job:
預設會看到:
改成:
其實就是設定成要指定標籤Label才可以把Jenkins本身Controller來跑Job
接著才是設置讓K8S平台來當agent,來跑Jenkins的Job設置:
然後會見到:
這邊就做一些名稱調整,不叫做kubernetes了,然後細部設定展開來設置
把上面畫面中的details點開來填:
往下拉還有很多項目,其中有一個測試:
可以跑跑看:
這邊看起來是成功了,歸功於我前一篇已經把SA/Role/RoleBindings都搞定
不然還滿建議看看上面YT影片中會出現哪些錯誤訊息,都提示得很清楚
很推薦自行看看!
甚至如果是用Token來跑oc/kubectl指令
還需要把身分Token設置成Jenkins憑證(Secret TXT形式的Jekins憑證)
可能會用到的指令整理如下:
#參考YT影片整理的內容:
kubectl create namespace jenkinskubectl create serviceaccount jenkins --namespace=jenkins#拿到上述SA的Token,要拿來設置Jenkins的Secret TXT憑證:
kubectl describe secret $(kubectl describe serviceaccount jenkins --namespace=jenkins | grep Token | awk '{print $2}') --namespace=jenkins#給予上述SA權限:
kubectl create rolebinding jenkins-admin-binding --clusterrole=admin --serviceaccount=jenkins:jenkins --namespace=jenkins
但是我用OCP的Web Console介面大概都搞定上面要幹的事了
接著特別要注意的是:
這邊可以先如YT大佬的介紹,使用看看WebSocket方式
儘管上面勾的是WebSocket,他還是會使用到下面寫的Jenkins URL位置!
如果系統上有設置一些轉繞,則那一行下面的"Jenkins URL"就要另外填!
實際建立Job,並以OCP的Pod來當作Agent運行:
接著就要見證可不可以運作了!
建立pipeline Job:
使用YT大佬給的pipeline範本,稍微調整:
注意到上面的agent下一層我改為OCP(呼應剛剛的設置名稱)
就這樣跑看看:
所以改回來:
調整:
監看一下OCP那邊狀況:
執行後立馬看到:
放大...
Jenkins Log看到:
然後過一段時間發現怪怪的:
不過離開監控模式後觀察是看到正常沒有pod:
雙Container的agent運行:
接著試試以下這個pipeline:
如上可以看到會用到兩個Container(一個Maven,一個Node)
執行後來細細觀看Jenkins運行的log:
這邊YT解說有一個重點是,即便是不同的Container
他其實都是共用同一個workspace空間
簡單做個實驗:
改成:
也就是以下:
在跑看看能否正常看到那個echo txt結果:
可以!