使用Jenkins進行CI/CD(5)

在以往的部署方式中,Jenkins一般都是分離與k8s單獨的安裝集群,但是這種方式存在一些不足的地方:

  1. 當job比較少的時候有部分slave節點處于空閑狀態,導致資源浪費。
  2. 當job比較多的時候slave節點可能會出現不夠用的情況,將導致部分job處于等待狀態。
  3. 當master節點出現問題之后,不能快速恢復,導致后續工作無法進行。

鑒于以上存在的問題,采用k8s的方式來部署Jenkins集群可以很好的解決,在k8s中只部署master節點,并通過pv對所用的job進行持久化存儲,通過k8s-Jenkins插件實現slave節點的動態創建,當job比較多的時候新建slave節點,并且在job執行完之后進行銷毀,并且即使master節點出現問題之后,也可以快速的通過deployment來快速的創建新的master并掛載到之前的pv上。從而達到master的高可用,也避免資源的浪費。

準備

1、插件安裝

在前一篇文章中簡單介紹了k8s插件的安裝,本節中先對其安裝和配置作詳細介紹。登陸Jenkins之后再插件管理中搜索kubernetes,點擊安裝即可。

2、插件配置

點擊進入Jenkins的系統配置,點擊添加cloud,選擇kubernets即可添加對k8s的集群的支持。

  1. 配置jenkins登陸k8s集群的密鑰
    點擊進去Jenkins的憑證管理,添加憑證,類別選擇Kubernetes service Acount,點擊ok即可。


  2. 配置基本信息
    這里主要配置k8s的url地址和用于認證的密鑰


  3. 配置k8s的pod模板,主要用于生成slave節點。
    在Jenkins中提供了兩種方式來添加agent,一種是通過ssh(由master連接到slave來執行任務),另一種是使用JNLP(Java 網絡啟動協議(JNLP) 是一種允許客戶端啟動托管在遠程Web服務器上的應用程序的協議)。這里主要采用第二種方式(由slave去鏈接master節點),結合docker鏡像。



    這里主要配置了jnlp協議所對應使用的容器鏡像,同時也可以再添加多個容器,比如:用于進行maven構建的maven容器等。

3、測試

  1. 創建項目
    在Jenkins中創建一個Freestyle類型的項目,取名為test。
  2. 項目配置
    1. 添加構建參數


    2. 現在項目運行的地方(只在slave中運行)


    3. 打印參數


  3. 執行構建,查看是否動態生成slave
    返回創建好的項目,點擊Build with Parameters,輸入參數值,點擊build??梢钥吹焦濣c先有pending(等待pod的創建)再轉換為執行構建

CI

在上一節中對kubernetes插件進行了簡單的應用,這一節將使用github+aliyun+Jenkins來實現項目的自動構建并將生成的鏡像上傳到aliyun鏡像倉庫

  1. 配置阿里云鏡像倉庫
    關于阿里云鏡像倉庫的使用請參照官方文檔,這里新建一個叫jks的倉庫。
  2. 配置阿里云鏡像倉庫密鑰
    點擊進去Jenkins的憑證管理,添加憑證。


  3. 新建項目
    在GitHub上新建一個項目,并將本地的maven項目推送到倉庫中。這里以及準備好了一個項目,當然讀者也可以自行創建自己的項目。https://github.com/tlhhup/tlhhup.git
  4. 新建Jenkins項目
    1. 創建一個流水線類型的項目,取名為tlhhup

    2. 添加構建參數


    3. 配置流水線

        podTemplate(containers: [#聲明使用到的容器
            containerTemplate(name: 'maven', image: 'maven:3.5-jdk-8', ttyEnabled: true, command: 'cat'),
            containerTemplate(name: 'docker', image: 'docker:latest', ttyEnabled: true, command: 'cat')
          ],
          serviceAccount:'jenkins',#使用的賬號,在部署Jenkins時創建的
          volumes: [
            nfsVolume(mountPath: '/root/.m2', serverAddress: '192.168.241.144', serverPath: '/nfs-share'), # 配置nfs服務器的信息,注意必須為真是有效的
            hostPathVolume(hostPath: '/var/run/docker.sock', mountPath: '/var/run/docker.sock')
          ]
          ) {
        
            node(POD_LABEL) {
                stage('Get a Maven project') {
                    git 'https://github.com/tlhhup/tlhhup.git'
                    container('maven') {
                        stage('Build a Maven project') {
                            sh 'mvn -DskipTests=true clean package'
                        }
                    }
                }
                stage('Build Docker Image'){ 
                    container('docker'){# 在docker容器中執行鏡像構建
                        sh '''
                            mkdir context
                            cp target/tlhhup-1.0-SNAPSHOT.jar context
                            cp doc/Dockerfile context
                        '''
                        sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/gitlabci/jks:${BUILD_NUMBER} context'
                    }
                }
                stage('Push Docker Image'){
                    container('docker'){
                        sh 'echo Push Docker Image'
                        withCredentials([usernamePassword(credentialsId: 'dd', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {#引用配置的密鑰
                            sh '''
                                docker login registry.cn-hangzhou.aliyuncs.com -u ${dockerHubUser} -p ${dockerHubPassword}
                                docker push registry.cn-hangzhou.aliyuncs.com/gitlabci/jks:${BUILD_NUMBER}
                            '''
                        }
                    }
                }
                stage('Deploy'){
                    input "Does the staging environment look ok?"
                }
            }
        }
      
    4. 執行構建

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容