rails上傳文件
㈠ 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 'http://192.168.26.55』
gitlab_rails[『gitlab_ssh_host』] = 餘.168.26.55』
gitlab_rails[gitlab_shell_ssh_port] = 222
修改完配置文件之後。直接啟動容器
相關的git命令
下面我們要配置私有的docker鏡像倉庫,用到的機器為:
這里倉庫我們選擇 harbor ,因為有web頁面,當然也可以使用 registry
首先需要設置selinux、防火牆
安裝並啟動docker並安裝docker-compose,關於docker-compose,這里不用了解太多,一個輕量的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下載插件特別慢,更換國內的清華源的鏡像地址會快不少
"http://www.google.com/" 替換為 "http://www..com/"
替換後查看
重啟docker,獲取登錄密匙
需要修改jenkins綁定的docker的啟動參數 , ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
修改鏡像庫啟動參數後需要重啟docker
後面 gitlab 要和 jenkins 進行聯動,所以必須要需要對 jenkins 的安全做一些設置,依次點擊 系統管理-全局安全配置-授權策略,勾選"匿名用戶具有可讀許可權"
添加 JVM 運行參數 -Dhudson.security.csrf..DISABLE_CSRF_PROTECTION=true 運行跨站請求訪問
這里的話我們要通過jenkins上的kubectl客戶端連接k8s,所以我們需要安裝一個k8s的客戶端kubectl,下載k8s客戶端
然後拷貝kubeconfig 證書,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文件來創建鏡像