02 k8s jenkins自動化(Jenkins-配置K8S負載)

时间:2024-05-19 07:13:18 编辑: 来源:

打包要想快就要將Nuget的包全部緩存下來,所以需要將~/.nuget 這個文件夾里面的東西用PV緩存起來(鄙人沒這個條件,用的HostPath)

使用 node 這個命令去指定節點

然后再NodeManager中查看就會看到出現了一個新的節點了,這個節點就是K8S中調度的,在打包完成后就會回收掉這個Pod。

到這里為Jenkins配置K8S的負載就全部完畢了。

Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平臺

上帝借由各種途徑使人變得孤獨,好讓我們可以走向自己。 ——赫爾曼·黑塞《德米安》

CI即為 持續集成(Continue Integration,簡稱CI) ,用通俗的話講,就是 持續的整合版本庫代碼編譯后制作應用鏡像 。建立有效的持續集成環境可以減少開發過程中一些不必要的問題、 提高代碼質量、快速迭代 等,

Jenkins :基于Java開發的一種持續集成工具,用于監控持續重復的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。

Bamboo : 是一個企業級商用軟件,可以部署在大規模生產環境中。

CD即持續交付Continuous Delivery和持續部署Continuous Deployment,用通俗的話說,即可以持續的部署到生產環境給客戶使用,這里分為兩個階段,持續交付我理解為滿足上線條件的過程,但是沒有上線,持續部署,即為上線應用的過程

關于 CD環境 ,我們使用以前搭建好的 K8s集群 ,K8s集群可以實現應用的 健康 檢測,動態擴容,滾動更新 等優點,關于K8s集群的搭建,小伙伴可以看看我的其他文章

拉取鏡像,啟動并設置開機自啟

配置docker買粉絲

GitLab 不多介紹。一個基于Git的版本控制平臺,,提供了Git倉庫管理、代碼審查、問題跟蹤、活動反饋和wiki,當然同時也提供了

切記:這里的端口要設置成80,要不push項目會提示沒有報錯,如果宿主機端口被占用,需要把這個端口騰出來

external_url '買粉絲://192.168.26.55’

gitlab_rails[‘gitlab_ssh_host’] = '192.168.26.55’

gitlab_rails[gitlab_shell_ssh_port] = 222

修改完配置文件之后。直接啟動容器

相關的git命令

下面我們要配置私有的docker鏡像倉庫,用到的機器為:

這里倉庫我們選擇 harbor ,因為有web頁面,當然也可以使用 registry

首先需要設置selinux、防火墻

安裝并啟動docker并安裝docker-買粉絲pose,關于docker-買粉絲pose,這里不用了解太多,一個輕量的docker編排工具

解壓harbor 安裝包:harbor-offline-installer-v2.0.6.tgz,導入相關鏡像

修改配置文件

harbor.yml:設置IP和用戶名密碼

./prepare && ./install.sh

查看相關的鏡像

訪問測試

這里因為我們要在192.168.26.55(CI服務器)上push鏡像到192.168.26.56(私倉),所有需要修改CI服務器上的Docker配置。添加倉庫地址

修改后的配置文件

加載使其生效

CI機器簡單測試一下

push一個鏡像,可以在私倉的web頁面查看

鏡像jenkins拉取

這里為什么要改成 1000,是因為容器里是以 jenkins 用戶的身份去讀寫數據,而在容器里jenkins 的 uid 是 1000,

更換國內清華大學鏡像,Jenkins下載插件特別慢,更換國內的清華源的鏡像地址會快不少

"買粉絲://買粉絲.google.買粉絲/" 替換為 "買粉絲://買粉絲..買粉絲/"

替換后查看

重啟docker,獲取登錄密匙

需要修改jenkins綁定的docker的啟動參數 , ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --買粉絲ntainerd=/run/買粉絲ntainerd/買粉絲ntainerd.sock

修改鏡像庫啟動參數后需要重啟docker

后面 gitlab 要和 jenkins 進行聯動,所以必須要需要對 jenkins 的安全做一些設置,依次點擊 系統管理-全局安全配置-授權策略,勾選"匿名用戶具有可讀權限"

添加 JVM 運行參數 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 運行跨站請求訪問

這里的話我們要通過jenkins上的kubectl客戶端連接k8s,所以我們需要安裝一個k8s的客戶端kubectl,下載k8s客戶端

然后拷貝kube買粉絲nfig 證書,k8s集群中查看證書位置,這里的證書是之前創建好的,小伙伴可以看看我之前的文章

命令測試沒有問題

我們要部署 Nginx 來運行 hexo 博客系統, hexo 編譯完后為一堆靜態文件,所以我們需要創建一個 svc 和一個 deploy ,使用 SVC 提供服務,使用 deploy 提供服務能力,使用 Nginx+hexo的靜態文件 構成的鏡像

這里我們先用一個Nginx鏡像來代替hexo博客的鏡像

查看deployments和pod

訪問測試沒有問題,之后我們配置好jenkins上的觸發器,直接替換就OK

我們通過 kubectl set 命令更新 deploy 的鏡像時,獲取的鏡像是通過私倉獲取的,所以需要在啟動參數添加私倉地址

這里所有的節點都需要設置后重啟docker

訪問jenkins,接下來才是重點,我們要的jenkins上配置整個CICD流程,從而實現自動化

下面我們編譯一下hexo,生成public的一個文件夾,然后上傳gitlab

同時需要編寫Dockerfile文件來創建鏡像

k8s之容器遷移 [jenkins為例]

一、數據備份

1.找到需要遷移的容器名稱

2.找到遷移容器的數據目錄

二、修改yaml配置文件

3.svc.yaml 主要修改點:namespace

4.ingress 的修改點:namespace、host

三、創建一個新的容器

1.創建并查看狀態

四、登錄到容器中清空數據文件

五、拷貝備份的數據文件到容器中

六、重啟容器

七、根據實際情況修改容器中目錄權限等問題

jenkins集群使用k8s部署,pipeline中文亂碼的問題解決記錄

我們使用的是Jenkinsfile,存放在git中,而不是分散在各個項目中,好處是便于管理和維護。

見下圖:

在jenkinsfile文件中寫入中文,還有在獲取構建人姓名的時候,出現中文亂碼問題。

先讀取當前構建人的姓名(一般為中文漢字),然后調用后端Http接口發送消息通知響應的人群。

這里的變量buildUser如果包含中文,會出現亂碼問題。。。

這里容易有個誤區,以為在Jenkins全局配置里設置了字符集為utf-8就能解決該問題。

其實上述的設置是針對master節點,而非slave節點。而我們的pipeline是運行于slave節點上。我們得在節點設置中,對pod template增加環境變量才是正確的方式。

解決亂碼需要做好兩步:

Jenkins集群在公司內部的實踐(一)

jenkins作為一款實用且廣泛實用的CI/CD工具,為大多數中小公司拿來即用。可當我們的業務和工程逐漸增多,它在構建和自動化任務方面的壓力也越來越大。

jenkins主要是用來基于源碼的打包,公司用到的語言包括java/php/android/h5等,同時各組能夠看到的項目也應該隔離開來。

開發人員需要讓它與git源碼的提交、合并結合起來,必要地和sonarqube、unit test和allure報告等集成。重點是unit test還會和mysql/mongodb/redis/es等中間件依賴,需要做到各任務之間的隔離。

測試人員在構建并運行后,除了要做回歸測試,期間也需要做自動化測試。(測試平臺我們選用的是meterspere開源平臺)

所以擺在我們面前的問題是:

1、jenkins集群化,滿足高可用的要求

2、通過Pipeline方式管理Job,通過pipeline模板做到自動化

3、每次新建項目時,審批通過后,一鍵自動創建jenkins/gitlab等工程。

4、能夠支持開發的單元測試和測試的自動化測試

5、將整個公司各語言的項目構建歸集在一起,做到友好的權限控制。

如上圖,salve的橫向擴展能力,足以支撐公司的所有語言的所有項目的構建。

整個部署完 K8s 的集群以后,我們⾸先需要部署的就是 Jenkins 的 Master 節點。 Master 節點相關的配置是通過 K8s 來創建⼏個重要的對象:

接下來就是要創建 deployment 對

搜索关键词: