Jenkins持續化集成


內容目錄:

  1. jenkins 概述與環境配置

  2. 基於jenkins 實現可持續化集成

  3. jenkins pipeline 核心應用

一、jenkins 概述與環境配置

  1. 關於可持續化集成 (CI)

  2. jenkins 概述

  3. 下載安裝jenkins

  4. 基礎環境配置與常用插件下載

1、關於可持續化集成

相信大家都知道jenkins是用來做可持續集成的? 但部問題是很多人並不明白什么叫可持續化集成。講概念之前我們先來舉一個場景:

一個團隊正着手開發一個項目,在需求評審之后由小組長把項目拆成了若干個模塊,分給不同的小伙伴去實現。2個星期以后各自模塊的功能都實現了,大家都很開心。這時該合在一起提測了吧。這一合小組長傻眼了,功能沒一個能用的,要么公共類沖突了,要么配置沖突....

經過上次的教訓,小組長變聰明了,在也不等功能開發之后在合並提測了,而是每天集成提測,如果發現沖突當天就要解決。

持續集成即 Continuous integration(CI) 是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡快地發現集成錯誤,讓團隊能夠更高效的開發軟件。

持續集成要點:

  • 統一的代碼庫(git)

  • 統一的依賴包管理(nexus)

  • 測試自動化

  • 構建全自動化(maven)

  • 部署自動化

  • 可追蹤的集成記錄

2、jenkins概述

jenkins 就是為了滿足上述持續集成的要點而設計的一款工具,其主體框架采用JAVA開發,實質內部功能都是由各種插件實現,極大提高了系統的擴展性。其不僅可以滿足JAVA系統的集成,也可以實現PHP等語言的集成發布。通過其pipeline 插件,用戶可以隨自己需要定制集成流程。

3、下載安裝jenkins

下載:jenkins 支持Docker、yum、msi 等安裝,在這里推薦大家直接選擇下載他對應的WAR包進行安裝。https://jenkins.io/download/

啟動:下載完成之后直接可通過 jar -jar 命令啟動

java -jar jenkins.war --httpPort=8080

也可以將其放至到servlet容器(tomcat\jetty\jboss)中直接啟動,無需過多的配置,一切插件化這是jenkins 比較優秀的設計。

配置:下載完成之后進入啟動頁(http://127.0.0.1:8080/) 會有一個 驗證過程,驗證碼存儲在 ${user_home}.jenkins\secrets\initialAdminPassword 中,接着就是進入安裝插件頁,選擇默認即可,這個過程稍長。

4、基礎環境配置與常用插件下載

在集成的時候,jenkins 用到了 Maven 、Git 所以服務器中必須提前安裝好這些環境。

插件下載:

更換源 ->系統管理->管理插件->高級 ->升級站點

把:http://updates.jenkins-ci.org/update-center.json

換成:http://mirror.esuni.jp/jenkins/updates/update-center.json

鏡像源查詢:http://mirrors.jenkins-ci.org/status.html

基本插件列表:

插件名稱 插件描述
Maven Integration maven 管理插件
Deploy to container 容器部署插件
Pipeline 管道集成插件
Email Extension 郵件通知插件
SSH 用於ssh 通信

二、基於jenkins 實現可持續化集成

  1. 持續化集成完成的目標
  2. 持續化集成配置
  3. 集成實現原理

1、持續化集成完成的目標

需要到達的目標如下:

  1. 自動基於分支構建項目

  2. 構建好的項目自動部署至Tomcat容器

  3. 構建好的項目自動上傳至Nexus 私服存檔

  4. 保存構建歷史記錄,並可以下載歷史記錄

2、持續化即成配置

  1. 新建maven job

  2. 配置checkout 源碼

  3. 編寫 maven構建命令

  4. 自動部署至Tomcat配置

    添加構建后操作:Deploy war/ear to container 項目

    自動部署的前提條件:

    1. 需要下載 Deploy to container 插件

    2. 設置Tomcat manager 用戶和密碼,以下配置加入至 Tomcat conf/tomcat-users.xml 中

    3. tomcat webapp 中必須保留 manager 項目

      <role rolename="admin-gui"/>
      
      <role rolename="manager-gui"/>
      
      <role rolename="manager-script"/>
      
      <user username="manager" password="manager" roles="manager-gui,manager-script"/>
      
      <user username="admin" password="admin" roles="admin-gui,manager-gui"/>
      
    4. 存檔配置

      構建后操作添加 Deploy war/ear to a container 項目

      image-20200207152727059

      配置setting.xml 用於獲取上傳至nexus 的權限

      vim ~/.m2/settings.xml

      # 添加一個 server  id 與 存檔配置當中的repository id 相對應。
       <server>
                <id>nexusReleases</id>
                <username>deployment</username>
                <password>111111</password>
      </server>
      

    3、實現集成原理

三、jenkins pipeline 核心應用

  1. pipeline 概要

  2. pipeline 基礎語法

  3. pipeline Demo演示

1、pipeline 概要

前面我們演示的 使用maven 來進行自動化構建,其流程分別是:構建環境准備==》源碼下載 ==》構建 ==》存檔 ==》部署。這是一種固化的構建流程,如果你們的需求是多個項目需要進行依賴構建這種復雜的構建場景 時該怎么辦?jenkins pipeline 可以做到這一點。

Jenkins從根本上講是一種支持多種自動化模式的自動化引擎。Pipeline在Jenkins上添加了一套強大的自動化工具,支持從簡單的連續集成到全面的連續輸送Pipeline的用例。用戶可以基於他實現更為復雜的建模場景。

2、pipeline基礎語法

以下就是一個非常簡單的 pipeline 腳本:

pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

agent 表示Jenkins應該為Pipeline的這一部分分配一個執行者和工作區。

stage 描述了這條Pipeline的一個階段。

steps 描述了要在其中運行的步驟 stage

sh 執行給定的shell命令

junit 是由JUnit插件提供的 用於聚合測試報告的Pipeline步驟。

3、pipeline Demo演示

前提條件:

  1. Jenkins 2.x或更高版本

  2. Pipeline插件

可以通過以下任一方式創建基本Pipeline:

  1. 直接在Jenkins網頁界面中輸入腳本。

  2. 通過創建一個Jenkinsfile可以檢入項目的源代碼管理庫。

用任一方法定義Pipeline的語法是一樣的,從項目源碼中檢入jenkinsfile 文件會更方便一些。

  • 基於腳本構建 pipeline:

    pipeline {
        agent any
        stages {
            stage('Checkout') {
                steps {
                    echo 'Checkout'
            stage('Build') {
                steps {
                    echo 'Building'
                }
            }
            stage('test'){
                steps{
                    echo 'test'
                }
            }
        }
    }
    
  • 基於Jenkinsfile 構建:

    pipeline {
        agent any 
        stages {
            stage('checkout') { 
                steps { 
                    echo 'checkout' 
                    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gogs_luban', url: 'http://git.jiagouedu.com/java-vip/tuling-api-gateway']]])
                }
            }
            stage('build'){
                steps {
                     echo 'build'
                     sh 'mvn clean install'
                }
            }
            stage('save') {
                steps {
                   echo 'save'
                   archiveArtifacts 'target/*.war'
                }
            }
        }
    }
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM