持续集成之jenkins基础
Jenkins基本概念
- 基于JAVA開(kāi)源的自動(dòng)化系統(tǒng)平臺(tái)
- 在servlet容器中運(yùn)行,如apache tomcat
- 提供CI,CD任務(wù)及流水線的服務(wù)
- 所有類(lèi)型的任務(wù):構(gòu)建、測(cè)試、部署等
- apache ant和apache maven項(xiàng)目以及任意shell腳本和windows批處理命令
- 支持各種SCM源碼控制工具
- git,subversion,cvs,perforce,clearcase,rtc等
- 豐富的插件生態(tài)系統(tǒng)支持功能擴(kuò)展
- 1400+插件,含SCM,測(cè)試,通知,報(bào)告,artifact,觸發(fā),外部集成等
- 基于web的管理和使用界面
- 源于Hudson
- Hudson由Sum公司在2004年啟動(dòng),第一個(gè)版本基于2005在java.net發(fā)布
- 2010年11月期間,Oracle對(duì)Sun的收購(gòu),引起商標(biāo)權(quán)之爭(zhēng)
- 2011年1月29日,項(xiàng)目名稱(chēng)從"hudson"改為"jenkins"
Jenkins的使用原因
- jenkins本身就是一個(gè)高度可配置的系統(tǒng)
- 由開(kāi)發(fā)者主導(dǎo)、面向開(kāi)發(fā)者、全開(kāi)源
- 治理(獨(dú)立董事會(huì))和社區(qū)
- 穩(wěn)定性
- LTS長(zhǎng)期支持發(fā)布線
- 每三個(gè)月發(fā)布一次穩(wěn)定版本
- 插件的平臺(tái)
- 1400多件插件
?
Jenkins的特點(diǎn)
- 免費(fèi)且開(kāi)源
- 與Jenkins共享了很多多代碼,安裝還是挺簡(jiǎn)單的關(guān)鍵的環(huán)境變量可以安全存儲(chǔ)
- 支持多個(gè)SCM,包括SVM,Mercurial,Git
- 集成了Github和Bitbucket
- 高度可配置
- 資源和教程很多
- 安裝運(yùn)行簡(jiǎn)單
- 分布式的構(gòu)建也能高效運(yùn)行
- 可跨平臺(tái)部署
- 很多高質(zhì)量的插件
- 得獎(jiǎng)無(wú)數(shù)
- 龐大的社區(qū)
釋:SCM http://www.cnblogs.com/itech/archive/2011/08/02/2125032.html
?
Jenkins工作流程
創(chuàng)建一個(gè)項(xiàng)目時(shí),操作選項(xiàng)
- 通用配置
- 工作空間管理,參數(shù)化設(shè)置,工具配置等全局管理
- 源碼管理
- 配置代碼源
- 構(gòu)建觸發(fā)器
- 與版本控制服務(wù)器集成,自動(dòng)觸發(fā)構(gòu)建
- 或者基于其他項(xiàng)目生成輪詢(xún),定時(shí)構(gòu)建
- 構(gòu)建環(huán)境
- 構(gòu)建
- 運(yùn)行shell腳本,python/groovy等腳本,ant/maven/gradle等
- 構(gòu)建后操作
- 制品歸檔
- 發(fā)布JUnit測(cè)試結(jié)果和javadoc
- 直接部署到生產(chǎn)或測(cè)試環(huán)境
- 電子郵件(或即時(shí)工具IM等)通知相關(guān)人
- 觸發(fā)其他的子任務(wù)或者下游任務(wù)
?
Jenkins的使用對(duì)象
- jenkins是一個(gè)工具,任何人都可以很快上手
- 建議以下團(tuán)隊(duì)或個(gè)人掌握jenkins
- 負(fù)責(zé)建設(shè)產(chǎn)品持續(xù)集成/交付流水線的人員(SCM,release/DevOps Engineer)
- 領(lǐng)導(dǎo)敏捷團(tuán)隊(duì)的敏捷管理者,希望理解諸如持續(xù)集成/交付等概念
- 在DevOps領(lǐng)域內(nèi)探索
- 想成為"jenkins developer"的開(kāi)發(fā)人員、管理人員
?
Jenkins安裝和運(yùn)行
- 支持以下平臺(tái)的OS
- docker
- war
- macOS
- Linux
- Windows
- Solaris,OmniOS,SmartOS
安裝準(zhǔn)備
- 最低硬件需求
- 256MB內(nèi)存
- 1GB磁盤(pán)空間(Docker安裝方式需要至少10GB)
- 推薦硬件需求
- 1GB + 內(nèi)存
- 50GB + 磁盤(pán)空間
- 軟件需求
- Java 8 -JRE/JDK均可
- 注:Docker方式無(wú)需單獨(dú)安裝java
(1).Docker方式
- macOS/Linux
- windows
docker run -u root --rm -d -p 8080:8080 --name jenkinsci ^ -v jenkins-data:/var/jenkins_home ^ -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean- 打開(kāi)瀏覽器 訪問(wèn)http://localhost:8080 - 安裝完成后根據(jù)向?qū)нM(jìn)行初始化配置(2).WAR文件安裝方式 - 推薦使用
- 本方式適用于任何java的操作系統(tǒng)或者平臺(tái)
- 下載最新的jenkins war包
http://mirrors.jenkins.io/war-stable/latest/jenkins.war
- 運(yùn)行命令
- 打開(kāi)瀏覽器訪問(wèn):http://localhost:8080
- 安裝完成后根據(jù)向?qū)нM(jìn)行初化配置
(3).WAR文件安裝方式 -Java servlet containers
- 本方式適用于Jenkins部署到已經(jīng)在Java servlet container內(nèi)
- 可以運(yùn)行Jenkins的Java servlet container為
- Glassfish
- Tomcat
- JBoss
- IBM WebSphere
- Jetty
- Jonas
- Weblogic
- Apache Geronimo 3.0
- Liberty profile
打開(kāi)瀏覽器訪問(wèn): http://localhost:8080
安裝完成后根據(jù)向?qū)нM(jìn)行初始化配置
(4)、windows安裝
- 下載最新msi安裝文件
http://mirrors.jenkins.io/windows/latest
- 解壓文件,雙擊msi根據(jù)指示進(jìn)行安裝
- 打開(kāi)瀏覽器 訪問(wèn)http://localhost:8080
?
如何安裝插件
- 系統(tǒng)管理-插件管理-可選插件(有還沒(méi)安裝)
- 根據(jù)需要選擇安裝的插件
- 點(diǎn)擊直接安裝或下載待重啟安裝
?
job使用介紹
- job類(lèi)型
- 配置SCM(source code management)
- git/svn
- 構(gòu)建觸發(fā)器
?
主要的Job類(lèi)型
- freestyle project
自由風(fēng)格項(xiàng)目,jenkins最主要的項(xiàng)目類(lèi)型
- maven project
maven項(xiàng)目專(zhuān)用,類(lèi)似freestyle,更簡(jiǎn)單
- multi-configuration project
多配置項(xiàng)目,適合需要大量不同配置(環(huán)境,平臺(tái)等)構(gòu)建
- pipeline
流水線項(xiàng)目,適合使用Pipeline(workflow)插件功能構(gòu)建流水線任務(wù),或者使用freestyle project不容易實(shí)現(xiàn)的復(fù)雜任務(wù)
- multibranch pipeline
多分支流水線項(xiàng)目,根據(jù)SCM倉(cāng)庫(kù)中的分支創(chuàng)建多個(gè)pipeline項(xiàng)目
?
Freestyle項(xiàng)目
- General
項(xiàng)目基本配置
項(xiàng)目名字,描述,參數(shù),禁用項(xiàng)目,并發(fā)構(gòu)建,限制構(gòu)建默認(rèn)node等
- Source code managemet
代碼庫(kù)信息,支持Git,Subversion等
- Build Triggers
構(gòu)建觸發(fā)方式
周期性構(gòu)建,poll scm,遠(yuǎn)程腳本觸發(fā)構(gòu)建,其他項(xiàng)目構(gòu)建結(jié)束后觸發(fā)等
- Build Environment
構(gòu)建環(huán)境相關(guān)設(shè)置
構(gòu)建前刪除workspace,向Console輸出添加時(shí)間戳,設(shè)置構(gòu)建名稱(chēng),插入環(huán)境變量等
- Build
項(xiàng)目構(gòu)建任務(wù)
添加1個(gè)或者多個(gè)構(gòu)建步驟
- Post-build Actions
構(gòu)建后行為
Artifact歸檔,郵件通知,發(fā)布單元測(cè)試報(bào)告,觸發(fā)下游項(xiàng)目等
注:restrict where this project can run 限定這個(gè)項(xiàng)目只能在某個(gè)節(jié)點(diǎn)上運(yùn)行
?
Source Code Manaagement
- git
- Subversion
- 其他80+插件支持其他SCM系統(tǒng)
?
Git 全局配置
- Build Node上安裝Git tool
- Global Tool Configuration配置
?
常用的Triggers
- Build periodically
設(shè)定類(lèi)似Cron周期性時(shí)間觸發(fā)構(gòu)建
- Poll SCM
設(shè)定類(lèi)似Cron周期性時(shí)間觸發(fā)檢查代碼變化,只有當(dāng)代碼變動(dòng)時(shí)才觸發(fā)構(gòu)建
- Hooks
gitlab hooks
github hooks
- Events
Gerrit events 時(shí)件觸發(fā)
?
安全管理策略
- 安全概述
- 認(rèn)證和授權(quán)
- 訪問(wèn)控制
- 忘記密碼處理
?
安全概述
1.X默認(rèn)配置下,沒(méi)有開(kāi)啟安全檢查(任何人都可以去查看)
2.X默認(rèn)開(kāi)啟安全檢查
Jenkins提供了兩種維度的安全策略
- 用戶(hù)認(rèn)證
Security Realm(安全域):決定用戶(hù)名和密碼,且指定用戶(hù)屬于的組(允許的登陸用戶(hù))
- 權(quán)限控制
Authorization Strategy(授權(quán)策略):分配用戶(hù)執(zhí)行某些操作的權(quán)限
如何進(jìn)入Jenkins安全控制界面:
系統(tǒng)管理(manage jenkins)-->configure global security -->啟用安全(enable security)
訪問(wèn)控制詳述:
安全域:
Jenkins專(zhuān)有用戶(hù)數(shù)據(jù)庫(kù):公司中用戶(hù)比較少的情況
公司規(guī)模使用人員多推薦使用AD或者LDAP
Servlet容器代理:比較老的或者容器代理的使用
授權(quán)策略:
Role-based strategy:設(shè)置創(chuàng)建一定的用戶(hù)策略,針對(duì)不同的用戶(hù)指定不同的角色,進(jìn)行不同權(quán)限管理
任何用戶(hù)可以做任何事(沒(méi)有任何限制):即使沒(méi)有登陸
安全矩陣:設(shè)置一個(gè)安全的矩陣,比較復(fù)雜,推薦使用
登陸用戶(hù)可以做任何事:即使是管理員的操作
遺留模式:舊版本使用
項(xiàng)目矩陣授權(quán)策略:比較細(xì)的授權(quán)策略,創(chuàng)建項(xiàng)目的admin可以創(chuàng)建一些比較細(xì)的項(xiàng)目級(jí)權(quán)限限制
?
忘記密碼的處理
如果權(quán)限設(shè)置錯(cuò)誤,或者忘記密碼,導(dǎo)致admin自己都無(wú)法登陸Jenkins的處理
- 命令行停止Jenkins
- 先備份$JENKINS_HOME中的config.xml
- 用編輯器打開(kāi)$JENKINS_HOME中的config.xml
- 將<useSecurity>true</useSecurity>元素中的true改為false
- 將<authorizationStrategy>和<securityRealm>元素的內(nèi)容刪掉
- 命令行啟動(dòng)Jenkins
?
jenkins分布式構(gòu)建
描述: 是一個(gè)master/slave的方式創(chuàng)建,通過(guò)tcp進(jìn)行通信,對(duì)于master要求并不高,可以使用vm,container,服務(wù)器等做master或slave
配置分布式構(gòu)建
1.在master創(chuàng)建分布式構(gòu)建的節(jié)點(diǎn)
- 系統(tǒng)管理-管理節(jié)點(diǎn)-新建節(jié)點(diǎn)
- 標(biāo)簽(輸入規(guī)范的名稱(chēng))
- 注意4種的啟動(dòng)方法
- java web start: docker或k8s使用比較多
- execution of command on the master
- slave agents via ssh
2.配置分布式構(gòu)建
- job的配置頁(yè)面-General
- Restrict where this project can be run 限定項(xiàng)目只能在某個(gè)節(jié)點(diǎn)上運(yùn)行,如ios的項(xiàng)目只能在某一類(lèi)的服務(wù)器中運(yùn)行
- 輸入標(biāo)簽
?
規(guī)范項(xiàng)目必要配置
注:本規(guī)范尤其適用于較多項(xiàng)目共同一jenkins的場(chǎng)景
- 項(xiàng)目命名規(guī)范
- 設(shè)置項(xiàng)目描述
- 設(shè)置歷史構(gòu)建清理規(guī)則(節(jié)約磁盤(pán)空間)
- 設(shè)置構(gòu)建節(jié)點(diǎn)Label
- 郵件通知
修改默認(rèn)顯示語(yǔ)言:https://www.jianshu.com/p/f94d617e260e
?
常用插件
- Jenkins定時(shí)的備份:ThinBackup(備份在遠(yuǎn)程服務(wù)器)
- 郵件發(fā)送插件:Email Extension Plugin
- 空間清理擴(kuò)展插件: Distributed Workspace Clean plugin
- Android/IOS設(shè)備管理
- Android Device connector plugin
- IOS Device connector plugin
?
轉(zhuǎn)載于:https://www.cnblogs.com/reid21/articles/8853862.html
總結(jié)
以上是生活随笔為你收集整理的持续集成之jenkins基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 20165220 第七周学习总结
- 下一篇: Spring Cloud学习笔记-010