jenkins自動化工具使用教程
自動化構建、測試、部署、代碼檢測越來越重要。主要有一下幾點原因
- 企業做大,項目變多,多端支持(web,h5,小程序等)
- 微服務提倡高內聚低耦合,項目因拆分變多
- DevOps自動化運維流行
- 集群化,高可用部署方案
- 避免人工操作出現的錯誤
- 集成管理系統,實現提交發布、發布審批、發布等UI可視化操作
等等原因,學習使用jenkins實現自動化作業非常有必要。這是我學習過程中整理的資料,分享給大家。
歡迎向我推薦更好的資料和討論關於jenkins的問題。
一、 安裝
Jenkins 是基於Java開發的一種可視化持續集成工具,將流水式的操作實現自動化。常用於自動化構建、自動化集成、自動化測試、自動化交付等
官方下載:https://jenkins.io/download/
1)Jenkins環境
安裝Jenkins
https://www.cnblogs.com/linJie1930906722/p/5965230.html
怎么在jenkins面板上面升級
https://jingyan.baidu.com/article/295430f1e503b10c7e0050d4.html
2)Jenkins安裝插件因網絡問題報錯處理方案
Jenkins鏡像地址改為國內鏡像地址:系統管理>>管理插件>>高級 菜單下將'升級站點'中的URL設為http://mirror.xmission.com/jenkins/updates/current/update-center.json 保存並且重啟jenkins服務
3)Jenkins在url中關閉和重啟.
https://www.cnblogs.com/jmcui/p/6933084.html
(exit,restart,reload)
4)如何將Jenkins集成到其他系統
Jenkins常見REST API(將Jenkins集成到其他系統)
https://www.cnblogs.com/imzye/p/8094145.html
二、 常見設置
1)Jenkins 英文切換成中文
Locale插件
https://blog.csdn.net/qq_15807167/article/details/79896131
2)Jenkins 中文亂碼
解決jenkins控制台中文亂碼問題
https://www.cnblogs.com/gaigaige/p/6835084.html
jenkins解決日志打印亂碼問題
https://blog.csdn.net/rosyhuan/article/details/78595876
3)環境變量、腳本變量使用
Jenkins可用環境變量列表以及環境變量的使用(Shell/Command/Maven/Ant)
https://www.cnblogs.com/EasonJim/p/6758382.html
[Jenkins]傳遞自定義變量:job內部步驟傳遞& job之間傳遞
http://www.cnblogs.com/junneyang/p/5239480.html
Jenkins 環境變量管理(全局環境變量< Slave 配置環境變量< Job 參數< Job injected 環境變量)
https://blog.csdn.net/huaqiangli/article/details/79281487
Environment Injector 插件(EnvInject):添加的環境變量,只有這個job的構建過程中可見,其他jobs的構建不可見
4)查看job執行時的歷史環境變量
當前job執行記錄 – 控制台輸出 - Environment Variables
5)去掉JENKINS的首頁警告
https://www.cnblogs.com/lanbojini/p/9916911.html
6)定時構建
Jenkins 定時構建語法規則
https://www.cnblogs.com/codeBang/p/9987492.html
三、 常用工具cli
1) git
jenkins 從git拉取代碼
https://www.cnblogs.com/jwentest/p/7065783.html
jenkins 同時拉取多個git倉庫(插件:multiple-scms)
http://dbp5588.iteye.com/blog/2396735
jenkins選擇分支構建(插件:git Parameters)
https://blog.csdn.net/u012375924/article/details/73835857
2) 腳本
a)shell
Shell 腳本常用命令
https://www.cnblogs.com/chen-lhx/p/5743438.html
( 一般以.sh為文件后綴,腳本開頭必須是 #!/bin/bash )
b)bat
bat教程
https://blog.csdn.net/jiangxian2008/article/category/6443498
批處理FOR參數/F之tokens詳解
https://www.jb51.net/article/17928.htm
遍歷文件夾&字符串處理
https://www.cnblogs.com/dasusu/p/9058554.html
bat中errorlevel與%errorlevel%的區別
https://www.jb51.net/article/49996.htm
iis7 appcmd命令:操作站點start|stop,操作應用程序池start|stop|recycle(回收)
http://blog.51cto.com/irow10/1790404
3) xcopy
Xcopy命令參數使用介紹
https://www.cnblogs.com/ChineseMoonGod/p/5458930.html
4) 7zip(7z)
7zip在dos命令行用法總結
https://www.jb51.net/article/30541.htm
四、 安全設置
1)常規安全設置
jenkins全局安全設置
https://blog.csdn.net/liyasong666888/article/details/50350371
2)用戶權限管理
自帶的權限管理
https://www.cnblogs.com/zz0412/p/jenkins_jj_14.html
Jenkins權限控制插件Role-based Authorization Strategy
https://blog.csdn.net/qn0007/article/details/78477792?locationNum=2&fps=1
Jenkins - Jenkins 修改用戶密碼
https://www.jianshu.com/p/a4ddcf91d367
忘記Jenkins管理員密碼的解決辦法
https://blog.csdn.net/jlminghui/article/details/54952148
五、 Dotnet 程序編譯發布
1)環境准備
使用vs安裝包,安裝組件:roslyn、msbuild、webdeploy、對應版本的.net framework、nuget等
2)Msbuild插件 + webdeploy
Git + msbuild插件 + webdeploy
https://www.cnblogs.com/kickinthehead/p/5388201.html
3)使用msbuild命令行
MSBuild 命令行編譯項目且不包含pdb文件
https://blog.csdn.net/zjm8499/article/details/47951839
vs2017案例(自行下載vs2017的msbuild,每個版本的msbuild支持的參數有差異)
|
01
|
"***\2017\Professional\MSBuild\15.0\Bin\msbuild.exe"
/toolsversion
:15.0
/t
:Rebuild
/p
:DeployOnBuild=
true
/p
:Configuration=Release
/p
:DebugType=none
/p
:ExcludeGeneratedDebugSymbol=
true
/p
:PublishProfile=D:\DevOps\jenkins_ex\Common\Config\jenkins_profile.pubxml
/p
:publishUrl=D:\DevOps\jenkins_ex\Build\Prod\***\Attach\File
/p
:VisualStudioVersion=15.0
/p
:TargetFrameworkVersion=v4.6.1 D:\DevOps\jenkins_ex\Source\Prod\***\Attach.csproj
|
jenkins_profile.pubxml內容如下
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
| Rebuild |
重新生成並生成到OutputPath |
| OutputPath |
不結合Web Deploy工具,編譯輸出的dll路徑 |
| WebProjectOutputDir |
不結合Web Deploy工具,web文件(js,css,cshtml等)的輸出目錄 |
| toolsversion |
根據.csproj里面的值進行設置。15.0對應vs2017的msbuild |
| DeployOnBuild
|
true表示啟用編譯並發布 |
| Configuration |
發布模式Debug 和 Release |
| DebugType |
none,表示當前項目不生成pdb文件 |
| ExcludeGeneratedDebugSymbol |
true,表示當前項目和引用項目都不生成pdb文件 |
| PublishProfile |
結合Web Deploy工具進行發布。 |
| publishUrl |
指定發布文件生成的目錄 |
| VisualStudioVersion |
Vs版本 15.0 對應vs2017 |
| TargetFrameworkVersion |
Vs中右鍵.csproj,查看項目屬性里的.NET版本 |
六、 備份、回滾
1)jenkins 配置、job等備份、還原
使用thinbackup插件進行備份、還原
http://blog.51cto.com/innocence/2316315?source=dra
手動備份、還原
備份JENKINS_HOME下的所有文件和文件夾,恢復的時候先停止jenkins服務。
(JENKINS_HOME 是jenkins > 系統管理 > 系統配置> 主目錄的值)
2)站點備份、還原
Jenkins實現生產環境部署文件的回滾操作(Windows)
https://www.cnblogs.com/EasonJim/p/5945266.html
jenkins:一鍵回滾站點集群
https://www.cnblogs.com/heyuquan/p/jenkins-onekey-rollback.html
七、 文件傳輸
1) Rsync同步工具
Rsync 是一個通過檢查文件的時間戳和大小,來跨計算機系統高效地“差異”傳輸和同步文件的工具
第一次同步時rsync 會復制全部內容(首次復制時沒有壓縮包快),但在下一次只傳輸“修改過”的文件。
Rsync服務端配置
https://www.cnblogs.com/zhenhui/p/5715840.html
基礎cli命令
https://baike.baidu.com/item/rsync/8086338?fr=aladdin
-u, --update 僅僅進行更新,即跳過所有DST中更加新的文件
rsync 自動創建目錄的坑點(只支持創建一層目錄)
https://www.cnblogs.com/kenkofox/p/8206749.html
權限問題
(1) rsync客戶端下載文件,文件權限會加入rsync客戶端運行的賬戶
(2) 上傳文件到rsync服務端,文件權限會加入rsync服務運行的賬戶
2) Publish over SSH 插件
Jenkins使用shell腳本部署到遠程服務器步驟
https://blog.csdn.net/russ44/article/details/51694074
解決SSH: Transferred 0 file(s)
https://www.jianshu.com/p/ef6a4022b7b5
3) Publish Over FTP 插件
使用方法
https://www.cnblogs.com/zz0412/p/jenkins_jj_04.html
Jenkins的FTP上傳插件Publish Over FTP Plugin設置支持中文路徑
https://www.cnblogs.com/EasonJim/p/6136099.html
4) CopyArtifact插件
把某個job的構建物拷貝到當前job的工作區
https://www.cnblogs.com/jp927/p/4576715.html
5) Copy Data To Workspace插件
文件從master復制到slave
https://blog.csdn.net/orichisonic/article/details/54706712
八、 分布式構建
1)master-slave
Jenkins設置Master/Slave
https://www.cnblogs.com/topplay/p/3875598.html
(提示:規划好從slave節點遠程工作目錄,比如目錄名為:jenkins_slave)
Slave配置節點中沒有Launch agent via Java Web Start?
https://blog.csdn.net/e295166319/article/details/54946966
(勾選Java Web Start Agent Protocol/4 (TLS 加密)。安裝和舊協議步驟一樣)
運行slave-agent.jnlp需安裝java jre1.81或以上版本,下載傳送門。
2)多job串行、並行
Jenkins上下游jobs設置(並行、串行)-- multijob 插件
https://blog.csdn.net/ouyanggengcheng/article/details/76131289
(使用multijob 插件:master 和 slave 節點 的“執行者數量”設置多些,否則子job過多,就沒法並發而互相卡死)
3)pipeline
Jenkins Pipeline 純腳本,效率高。但是,入門門檻高,配置可讀性差,維護難。使用multijob插件,可視化UI配置更加簡單易用。Multijob 中包含的獨立job,不能是pipe類型
Jenkins Pipeline的總體介紹
https://blog.csdn.net/diantun00/article/details/81075007
Jenkins pipeline:pipeline 使用之語法詳解
https://www.cnblogs.com/YatHo/p/7856556.html
Jenkins pipeline 並行執行任務流
https://www.cnblogs.com/sparkdev/p/9742739.html
Jenkins Pipeline插件十大最佳實踐
http://blog.didispace.com/jenkins-pipeline-top-10-action/
4)觸發JENKINS遠程構建
方式一:插件Parameterized Remote Trigger
- username+job token方案
https://www.cnblogs.com/wolfshining/p/7685725.html
- Credentials Authentication方案
http://www.tothenew.com/blog/jenkins-parameterized-remote-trigger-plugin/
(設置了”系統憑證”觸發不了遠程job。那么改為”全局憑證”)
(優化:單獨設置一個執行遠程job的賬戶,權限可控性高,日志里能查執行者)
方式二:HTTP URL 觸發JENKINS遠程構建
匿名方案
https://www.jianshu.com/p/aa0dc1157599
User API Token方案
https://www.cnblogs.com/tyrionyang/p/8183819.html
九、 自動化測試
Jenkins之插件Publish HTML reports的使用
https://blog.csdn.net/xu19950210rou/article/details/74729296
Jenkins – Unit Testing(單元測試)
https://blog.csdn.net/henni_719/article/details/52523118
基於Jenkins設計自動化測試工作流
https://www.jianshu.com/p/b9f75d9dc1b7
Postman+Newman+jenkins實現API自動化測試
https://www.cnblogs.com/liyanze-z/p/8270036.html
Jenkins + Jmeter 構建接口、性能測試
https://blog.csdn.net/tomoya_chen/article/details/72677336
Jenkins自動化測試(Selenium)
https://www.yiibai.com/jenkins/jenkins_automated_testing.html
十、 優化設置
1)設置友好的構建記錄名字
使用user build vars 插件獲取jenkins用戶相關變量
https://www.cnblogs.com/honeybee/p/6525322.html
(注意需要勾選"Set jenkins user build variables.")
自定義build name (build-name-setter + user build vars)
http://www.cnblogs.com/luolizhi/p/5702301.html
#${BUILD_NUMBER}-${ENV,var="BUILD_USER"}
直接使用 ${BUILD_USER} 也可以取到名字,但是會提示Unrecognized macro 'BUILD_USER',可以忽略
2)設置詳細的構建描述內容
使用description setter 插件設置構建描述(eg:重要參數顯示、APP二維碼等)
使用Jenkins搭建APP持續集成,並展現二維碼
https://blog.csdn.net/u011904605/article/details/54619549
3)日志大小的問題
Jenkins日志文件過大解決方案
https://cloud.tencent.com/info/a514fa30f534e52d4b2d94da3a8d839d.html
jenkins 修改log路徑(僅linux)
http://www.cnblogs.com/weifeng1463/p/9382417.html
Avoid large log Jenkins file (and stop build if needed)
https://stackoverflow.com/questions/30805253/avoid-large-log-jenkins-file-and-stop-build-if-needed
(安裝 Logfilesizechecker 插件和 build timeout 插件並在系統設置里面設置閾值)
jenkins 日志爆滿DNS查詢錯誤
https://blog.csdn.net/qq_33588470/article/details/54647496
4)job並發構建
必要時,job並發構建
http://www.mamicode.com/info-detail-2158627.html
十一、 其他插件
提示:不使用的插件可以自行卸載掉,因為插件多了經常會提示你更新
1)多環境多配置插件 Matrix Project Plugin
(該插件已默認安裝,舊名:multi-configuration)
Jenkins Multi-configuration Project使用體驗
https://www.jianshu.com/p/32f6c2e08161
2)job參數化擴展
extended choice parameter (單選,多選,讀取文件中的選項)
http://www.cnblogs.com/zhaojingyu/p/9862371.html
3)jenkins插件build timeout和build timestamp
https://www.cnblogs.com/itech/p/5694728.html
4)Email通知功能
jenkins配置自動發送郵件(插件:Email Extension)
https://www.cnblogs.com/gcgc/p/5631385.html
使用email-ext替換Jenkins的默認郵件通知
https://www.cnblogs.com/zz0412/p/jenkins_jj_01.html
Jenkins上配置郵件通知模板案例
https://www.jianshu.com/p/9368b6627a6d
提示:將模板文件放到$JENKINS_HOME/email-templates目錄下,如果沒有這個目錄,自己創建該目錄。
十二、 解決方案與案例
1)Dotnet應用
jenkins部署.net平台自動化構建的方法步驟
http://www.cnblogs.com/shenh/p/8946404.html
jenkins+donet core持續集成環境搭建
https://www.cnblogs.com/TomGui/archive/2017/04/06/6673084.html
Centos7+Docker+Jenkins+ASP.NET Core 2.0自動化發布與部署的實現
https://www.cnblogs.com/LongJiangXie/p/7517909.html
2)IOS\Android APP應用
使用Jenkins搭建iOS/Android持續集成打包平台
https://blog.csdn.net/u011904605/article/details/54619549
3)nodejs項目(webpack打包)
Jenkins打包NodeJS項目
https://my.oschina.net/mobinchao/blog/871703
