自动化构建、测试、部署、代码检测越来越重要。主要有一下几点原因
1. 企业做大,项目变多,多端支持(web,h5,小程序等)
2. 微服务提倡高内聚低耦合,项目因拆分变多
3. DevOps自动化运维流行
4. 集群化,高可用部署方案
5. 避免人工操作出现的错误
6. 集成管理系统,实现提交发布、发布审批、发布等UI可视化操作
等等原因,学习使用jenkins实现自动化作业非常有必要。这是我学习过程中整理的资料,分享给大家。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
目录
一、 安装
1) Jenkins安装插件因网络问题报错处理方案
2) 如何将Jenkins集成到其他系统
二、 常见设置
本节介绍jenkins常见设置,如中文、job变量使用、查看job历史执行变量、定时构建、清理历史构建等
三、 常用工具cli
本节介绍:git、脚本(shell、bat、powershell),xcopy、7zip等工具
四、 安全设置
本节介绍jenkins安全设置,用户权限管理
五、 Dotnet 程序编译发布
六、 高可用
本节介绍:jenkins master 高可用设计方案、jenkins配置备份、配置变更历史、站点应用备份回滚
七、 文件传输
本节介绍:多服务器之间传输文件的方式,如:第三方rsync同步工具,publish over ssh插件,publish over ftp插件,copyArtifact插件,Copy DataTo Workspace插件等
八、 分布式构建
1) master-slave
2) 多job串行、并行
3) pipeline
4) 触发JENKINS远程构建
九、 自动化测试
十、 优化设置
1) 设置友好的构建记录名字、构建描述内容
2) 视图管理、执行大屏显示、任务执行状态颜色控制
3) 日志大小的问题
4) job并发构建
十一、 其他插件
本节介绍:多环境配置插件、参数化扩展、通知(email,钉钉)、job文件夹组织插件(floders plugins)等
十二、 解决方案与案例
案例包含:dotnet,dotnet core、docker,ios\android app、nodejs项目(webpack)
一、 安装
Jenkins 是基于Java开发的一种可视化持续集成工具,将流水式的操作实现自动化。常用于自动化构建、自动化集成、自动化测试、自动化交付等
官方下载:https://jenkins.io/download/
安装Jenkins
怎么在jenkins面板上面升级
Jenkins在url中关闭和重启(exit,restart,reload)
1)Jenkins安装插件因网络问题报错处理方案
Jenkins镜像地址改为国内镜像地址:系统管理>>管理插件>>高级 菜单下将'升级站点'中的URL设为http://mirror.xmission.com/jenkins/updates/current/update-center.json 保存并且重启jenkins服务
linux:进入到Jenkins的工作目录/var/lib/jenkins/修改hudson.model.UpdateCenter.xml文件。将http://updates.jenkins-ci.org/update-center.json修改为http://mirror.xmission.com/jenkins/updates/update-center.json,再重启jenkins
2)如何将Jenkins集成到其他系统
Jenkins常见REST API(将Jenkins集成到其他系统)
使用shell脚本curl调用jenkins进行构建并判断是否构建成功
windows安装curl工具使用
在windows bat中可执行的命令 curl -X POST http://IP:8080/job/auto-publish-folder/job/job-name/buildWithParameters --user admin:admin -d p_app_key=Api
二、 常见设置
Jenkins 英文切换成中文(Locale插件)
Jenkins 中文乱码
解决jenkins控制台中文乱码问题
jenkins解决日志打印乱码问题
环境变量、脚本变量使用
Jenkins可用环境变量列表以及环境变量的使用(Shell/Command/Maven/Ant)
[Jenkins]传递自定义变量:job内部步骤传递& job之间传递
Jenkins 环境变量管理(全局环境变量< Slave 配置环境变量< Job 参数< Job injected 环境变量)
Environment Injector 插件(EnvInject):添加的环境变量,只有这个job的构建过程中可见,其他jobs的构建不可见
系统环境:系统环境变量变了后,jenkins脚本工具无法立刻加载最新的。比如powershell 使用 dir env: 命令可以打印当前加载到的系统环境变量,不是最新的可以重启jenkins
查看job执行时的历史环境变量方法:当前job执行记录 – 控制台输出 - Environment Variables
去掉jenkins的首页告警信息(eg:插件更新信息)
定时构建
Jenkins 定时构建语法规则
Jenkins设置定时任务未生效
Jenkins job未按设置的时间执行
Jenkins自动丢弃构建历史数据(释放空间)
Jenkins修改Job工作空间、修改日志路径(比如git下载到指定目录)
Jenkins重置build序号
三、 常用工具cli
1) git
Failed to connect to repository:Error performing command:git.exe ls-remote-h
jenkins 从git拉取代码
jenkins 同时拉取多个git仓库(插件:multiple-scms)
jenkins选择分支构建(插件:git Parameters)
Jenkins持续集成:git commit 自动触发构建
2) 脚本
a)shell
Shell 脚本常用命令
( 一般以.sh为文件后缀,脚本开头必须是 #!/bin/bash )
b)windows bat
bat教程
批处理FOR参数/F之tokens详解
遍历文件夹&字符串处理
bat中errorlevel与%errorlevel%的区别
iis7 appcmd命令:操作站点start|stop,操作应用程序池start|stop|recycle(回收)
c)powershell
powershell 中是不区分大小写的(但是linux区分,所以区分大小写是好习惯)
微软宣布PowerShell 7 Linux/macOS/Windows全平台兼容
linux上安装和使用powershell
PowerShell 脚本的后缀名为什么叫PS1
跨平台PowerShell如何远程管理Linux/Mac/Windows?
语法
Windows PowerShell基本语法及常用命令
[MSDN]PowerShell API文档
传递枚举的案例:$_.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)
Powershell代码中调用Jenkins的变量
jenkins 控制台输出powershell执行代码行(Set-PSDebug -Trace 1)
Powershell在字符串中使用变量
Powershell定义多行文本
PowerShell~文件操作和对象遍历
Powershell从独立ps1文件中加载函数
PowerShell中给函数参数设置帮助信息
PowerShell函数参数设置为即可选又必选的方法
JSON
PowerShell读取JSON配置文件
PowerShell分析Json文件?(注意评论区)
发布
利用PowerShell+Jenkins,实现项目的自动化部署
Powershell远程管理Windows Server(WinRM)相关安全配置,否则服务器会拒绝远程管理
其他
Sample all PowerShell Console Colors
powershell 输出信息到文件
PowerShell中使用Test-Path命令检查文件或文件夹路径是否存在示例
异常
在jenkins中处理外部命令7z的异常
echo $LASTEXITCODE。一般命令正确执行返回0,失败返回非0值。
3) xcopy
Xcopy命令参数使用介绍
XCopy排除复制/EXCLUDE的用法
eg:xcopy D:\Source D:\Dest /e/i/y/d
/D:m-d-y 复制在指定日期或指定日期以后改变的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。
4) 7zip(7z)
7zip在dos命令行用法总结
四、 安全设置
jenkins全局安全设置
用户权限管理
自带的权限管理
Jenkins权限控制插件Role-based Authorization Strategy
Jenkins - Jenkins 修改用户密码
忘记Jenkins管理员密码的解决办法
五、 Dotnet 程序编译发布
1)环境准备
使用vs安装包,安装组件:roslyn、msbuild、webdeploy、对应版本的.net framework、nuget等
这样安装后,编译时依然可能出现环境问题。比如:dll不存在等等
解决办法:打包对应msbuild目录拷贝到服务器上。( eg:打包 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild 目录)
2)Msbuild插件 + webdeploy
Git + msbuild插件 + webdeploy
3)使用msbuild命令行
MSBuild 命令行编译项目且不包含pdb文件
vs2017案例(自行下载vs2017的msbuild,每个版本的msbuild支持的参数有差异)
windows bat 命令:
"***\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
powershell 命令:
$msbuild_tool = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\MSBuild\\15.0\\Bin\\msbuild.exe" $ms_project_path = "***\\Lks.Git.P\\Web\\Lks.Platform\\Lks.Platform.csproj" $ms_args_solution_dir = "/p:SolutionDir=***\\c-publish-pull-code\\" $ms_args_publish_profile = "/p:PublishProfile=C:\\jenkins-ex\\common\\config\\build\\jenkins_profile.pubxml" $ms_args_publish_dir = "/p:publishUrl=C:\\jenkins-ex\\publish\\build\\LKS.4.0\\Platform\\File\\" &$msbuild_tool $ms_project_path /toolsversion:15.0 /t:Rebuild /p:DeployOnBuild=true /p:Configuration=Release /p:DebugType=none /p:ExcludeGeneratedDebugSymbol=true /p:VisualStudioVersion=15.0 /p:TargetFrameworkVersion=v4.6.1 $ms_args_publish_profile $ms_args_publish_dir $ms_args_solution_dir
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版本 |
3)dotnet core 发布命令
dotnet restore
dotnet publish
六、 高可用
jenkins:job配置信息变更历史记录(Job Configuration History 插件)
jenkins配置备份、还原
使用thinbackup插件进行备份、还原
手动备份、还原
备份JENKINS_HOME下的所有文件和文件夹,恢复的时候先停止jenkins服务。
(JENKINS_HOME 是jenkins > 系统管理 > 系统配置> 主目录的值)
使用SCM Sync configuration 插件备份到github上
站点应用备份
Jenkins实现生产环境部署文件的回滚操作(Windows)
jenkins:一键回滚站点集群
jenkins master 高可用设计方案
Jenkins Pipeline 高可用设计方法(值得深入研究)
Jenkins分布式集群设计方案
jenkins双向备份;高可用部署;
Jenkins高可用方案汇总
七、 文件传输
1) Rsync同步工具
Rsync 是一个通过检查文件的时间戳和大小,来跨计算机系统高效地“差异”传输和同步文件的工具
第一次同步时rsync 会复制全部内容(首次复制时没有压缩包快),但在下一次只传输“修改过”的文件。
Rsync服务端配置
基础cli命令
-u, --update 仅仅进行更新,即跳过所有DST中更加新的文件
rsync 自动创建目录的坑点(只支持创建一层目录)
权限问题
(1) rsync客户端下载文件,文件权限会加入rsync客户端运行的账户
(2) 上传文件到rsync服务端,文件权限会加入rsync服务运行的账户
服务端权限管理:rsync4.10 自带的(chmod.exe+chown.exe)
2) Publish over SSH 插件
Jenkins使用shell脚本部署到远程服务器步骤
解决SSH: Transferred 0 file(s)
3) Publish Over FTP 插件
publish over ftp 使用方法
Jenkins的FTP上传插件Publish Over FTP Plugin设置支持中文路径
4) CopyArtifact插件
把某个job的构建物拷贝到当前job的工作区
5) Copy Data To Workspace插件
文件从master复制到slave
其他
使用powershell远程传输文件
八、 分布式构建
1)master-slave
Jenkins设置Master/Slave
(提示:规划好从slave节点远程工作目录,比如目录名为:jenkins_slave)
Slave配置节点中没有Launch agent via Java Web Start?
(勾选Java Web Start Agent Protocol/4 (TLS 加密)。安装和旧协议步骤一样。新版本这样操作后依然没有Java Web Start。那么直接使用 "Launch agent by connecting it to the master")
安装slave-agent.jnlp时,在安装为windows服务时出现"Access Denied"权限问题,解决方案传送门。
运行slave-agent.jnlp需安装java jre1.81或以上版本,下载传送门。
jenkins 的节点怎么使用变量(插件:Node and label parameter)
linux jenkins master上管理windows jenkins slave
Jenkins配置linux slave机器
2)多job串行、并行
Jenkins上下游jobs设置(并行、串行)-- multijob 插件
(使用multijob 插件:master 和 slave 节点 的“执行者数量”设置多些,否则子job过多,就没法并发而互相卡死)
3)pipeline
Jenkins Pipeline 纯脚本,效率高。相对jenkins UI,入门门槛高,配置可读性差,维护难。使用multijob插件,可视化UI配置更加简单易用。Multijob 中包含的独立job,不能是pipe类型
Jenkins Pipeline的总体介绍
Jenkins pipeline:pipeline 使用之语法详解
Jenkins pipeline 并行执行任务流
Jenkins Pipeline插件十大最佳实践
Jenkins2 插件 Pipeline+BlueOcean 实现持续交付的初次演练
Jenkins执行GitHub上的pipeline脚本
4)触发JENKINS远程构建
方式一:插件Parameterized Remote Trigger
1. username+job token方案
2. Credentials Authentication方案
(设置了”系统凭证”触发不了远程job。那么改为”全局凭证”)
(优化:单独设置一个执行远程job的账户,权限可控性高,日志里能查执行者)
方式二:HTTP URL 触发JENKINS远程构建
匿名方案
User API Token方案
九、 自动化测试
Jenkins之插件Publish HTML reports的使用
Jenkins – Unit Testing(单元测试)
基于Jenkins设计自动化测试工作流
Postman+Newman+jenkins实现API自动化测试
Jenkins + Jmeter 构建接口、性能测试
Jenkins自动化测试(Selenium)
sonarqube与dotnetcore
SonarQube系列一、Linux安装与部署
SonarQube系列二、分析dotnet core/C#代码
SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
十、 优化设置
1)设置友好的构建记录名字、构建描述内容
使用user build vars 插件获取jenkins用户相关变量
(注意需要勾选"Set jenkins user build variables.")
自定义build name (build-name-setter + user build vars)
#${BUILD_NUMBER}-${ENV,var="BUILD_USER"}
直接使用 ${BUILD_USER} 也可以取到名字,但是会提示Unrecognized macro 'BUILD_USER',可以忽略
使用Jenkins搭建APP持续集成,并展现二维码
使用description setter 插件设置构建描述(eg:重要参数显示、APP二维码等)
2)视图管理、执行大屏显示、任务执行状态颜色控制
1、Jenkins 利用Dashboard View插件管理任务视图
2、jenkins视图插件build monitor view
3、插件名:Green Balls。使用绿色代替默认的蓝色表示任务运行成功的状态
3)日志大小的问题
Jenkins日志文件过大解决方案
jenkins 修改log路径(仅linux)
Avoid large log Jenkins file (and stop build if needed)
(安装 Logfilesizechecker 插件和 build timeout 插件并在系统设置里面设置阈值)
jenkins 日志爆满DNS查询错误
4)job并发构建
必要时,job并发构建
十一、 其他插件
提示:不使用的插件可以自行卸载掉,因为插件多了经常会提示你更新
多环境多配置插件(旧名:multi-configuration)
job参数化扩展:extended choice parameter (单选,多选,读取文件中的选项)
jenkins插件build timeout和build timestamp
Email通知功能
jenkins配置自动发送邮件(插件:Email Extension)
Jenkins自动发送邮件配置及定时构建
使用email-ext替换Jenkins的默认邮件通知
Jenkins上配置邮件通知模板案例
提示:将模板文件放到$JENKINS_HOME/email-templates目录下,如果没有这个目录,自己创建该目录。
钉钉通知
运维利器:钉钉机器人脚本告警(Linux Shell 篇)
Folders Plugin插件:允许将job组织成有层次的文件夹(支持权限管理)
jenkins 的 folders plugin 是做什么用的?
organize jobs in hierarchical folders
十二、 解决方案与案例
Dotnet应用
jenkins部署.net平台自动化构建的方法步骤
jenkins+donet core持续集成环境搭建
Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现
IOS\Android APP应用
使用Jenkins搭建iOS/Android持续集成打包平台
nodejs项目(webpack打包)
Jenkins打包NodeJS项目
Docker
基于Jenkins,docker实现自动化部署(持续交互)
Jenkins X 相关文章:
Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。
Jenkins X实践系列(1) —— 背景知识
Jenkins X实践系列(2) —— 基于jx的DevOps实践
Jenkins + Docker 容器化方案
Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD
(注意评论区,都建议不用docker版jenkins,因为配置特麻烦)
===================================================
over。资料很多,足够你从入门到放弃。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。