- jenkins 概述與環境配置
- 基於jenkins 實現可持續化集成
- jenkins pipeline 核心應用
一、jenkins 概述與環境配置
知識點:
- 關於可持續化集成 (CI)
- jenkins 概述
- 下載安裝jenkins
- 基礎環境配置與常用插件下載
1、關於可持續化集成
相信大家都知道jenkins是用來做可持續集成的? 但部問題是很多人並不明白什麼叫可持續化集成。講概念之前我們先來舉一個場景:
一個團隊正着手開發一個項目,在需求評審之後由小組長把項目拆成了若干個模塊,分給不同的小夥伴去實現。2個星期以後各自模塊的功能都實現了,大家都很開心。這時該合在一起提測了吧。這一合小組長傻眼了,功能沒一個能用的,要麼公共類衝突了,要麼配置衝突....
經過上次的教訓,小組長變聰明瞭,在也不等功能開發之後在合併提測了,而是每天集成提測,如果發現衝突當天就要解決。
持續集成即 Continuous integration(CI) 是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,每次集成都通過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘快地發現集成錯誤,讓團隊能夠更高效的開發軟件。
持續集成要點:
- 統一的代碼庫(git)
- 統一的依賴包管理(nexus)
- 測試自動化
- 構建全自動化(maven)
- 部署自動化
- 可追蹤的集成記錄
2、jenkins 概述
jenkins 就是爲了滿足上述持續集成的要點而設計的一款工具,其主體框架採用JAVA開發,實質內部功能都是由各種插件實現,極大提高了系統的擴展性。其不僅可以滿足JAVA系統的集成,也可以實現PHP等語言的集成發佈。通過其pipeline 插件,用戶可以隨自己需要定製集成流程。
2、下載安裝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 中,接着就是進入安裝插件頁,選擇默認即可,這個過程稍長。
3、基礎環境配置與常用插件下載
在集成的時候,jenkins 用到了 Maven 、Git 所以服務器中必須提前安裝好這些環境,具體參照前面的git與maven 課程。
插件下載
更換源 ->系統管理->管理插件->高級 ->升級站點
把: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'
}
}
}
}