內容目錄:
-
jenkins 概述與環境配置
-
基於jenkins 實現可持續化集成
-
jenkins pipeline 核心應用
一、jenkins 概述與環境配置
-
關於可持續化集成 (CI)
-
jenkins 概述
-
下載安裝jenkins
-
基礎環境配置與常用插件下載
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、持續化集成完成的目標
需要到達的目標如下:
-
自動基於分支構建項目
-
構建好的項目自動部署至Tomcat容器
-
構建好的項目自動上傳至Nexus 私服存檔
-
保存構建歷史記錄,並可以下載歷史記錄
2、持續化即成配置
-
新建maven job

-
配置checkout 源碼

-
編寫 maven構建命令

-
自動部署至Tomcat配置
添加構建后操作:Deploy war/ear to container 項目

自動部署的前提條件:
-
需要下載 Deploy to container 插件
-
設置Tomcat manager 用戶和密碼,以下配置加入至 Tomcat conf/tomcat-users.xml 中
-
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"/> -
存檔配置
構建后操作添加 Deploy war/ear to a container 項目

配置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 核心應用
-
pipeline 概要
-
pipeline 基礎語法
-
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演示
前提條件:
-
Jenkins 2.x或更高版本
-
Pipeline插件
可以通過以下任一方式創建基本Pipeline:
-
直接在Jenkins網頁界面中輸入腳本。
-
通過創建一個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' } } } }
