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内容如下
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