自动化构建、测试、部署、代码检测越来越重要。主要有一下几点原因
- 企业做大,项目变多,多端支持(web,h5,小程序等)
- 微服务提倡高内聚低耦合,项目因拆分变多
- DevOps自动化运维流行
- 集群化,高可用部署方案
- 避免人工操作出现的错误
- 集成管理系统,实现提交发布、发布审批、发布等UI可视化操作
等等原因,学习使用jenkins实现自动化作业非常有必要。这是我学习过程中整理的资料,分享给大家。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
目录
一、 安装
1) Jenkins环境
2) Jenkins安装插件因网络问题报错处理方案
3) Jenkins在url中关闭和重启.
4) 如何将Jenkins集成到其他系统
二、 常见设置
1) Jenkins 英文切换成中文
2) Jenkins 中文乱码
3) 环境变量、脚本变量使用
4) 查看job执行时的历史环境变量
5) 去掉JENKINS的首页警告
6) 定时构建
三、 常用工具cli
1) git
2) 脚本
a) shell
b) bat
3) xcopy
4) 7zip(7z)
四、 安全设置
1) 常规安全设置
2) 用户权限管理
五、 Dotnet 程序编译发布
1) 环境准备
2) Msbuild插件 + webdeploy
3) 使用msbuild命令行
六、 备份、回滚
1) jenkins 配置、job等备份、还原
2) 站点备份、还原
七、 文件传输
1) Rsync同步工具
2) Publish over SSH 插件
3) Publish Over FTP 插件
4) CopyArtifact插件
5) Copy Data To Workspace插件
八、 分布式构建
1) master-slave
2) 多job串行、并行
3) pipeline
4) 触发JENKINS远程构建
九、 自动化测试
十、 优化设置
1) 设置友好的构建记录名字
2) 设置详细的构建描述内容
3) 日志大小的问题
4) job并发构建
十一、 其他插件
1) 多环境多配置插件 Matrix Project Plugin
2) job参数化扩展
3) jenkins插件 build timeout和build timestamp
4) Email通知功能
十二、 解决方案与案例
1) Dotnet应用
2) IOS\Android APP应用
3) nodejs项目(webpack打包)
一、 安装
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
===================================================
over。资料很多,足够你从入门到放弃。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。