[CI&CD]jenkins自动化工具使用教程
自动化构建、测试、部署、代码检测越来越重要。主要有一下几点原因
1. 企业做大,项目变多,多端支持(web,h5,小程序等)
2. 微服务提倡高内聚低耦合,项目因拆分变多
3. DevOps自动化运维流行
4. 集群化,高可用部署方案
5. 避免人工操作出现的错误
6. 集成管理系统,实现提交发布、发布审批、发布等UI可视化操作
等等原因,学习使用jenkins实现自动化作业非常有必要。这是我学习过程中整理的资料,分享给大家。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
目录
本节介绍jenkins常见设置,如中文、job变量使用、查看job历史执行变量、定时构建、清理历史构建等
本节介绍:git、脚本(shell、bat、powershell),xcopy、7zip等工具
本节介绍jenkins安全设置,用户权限管理
本节介绍:jenkins master 高可用设计方案、jenkins配置备份、配置变更历史、站点应用备份回滚、监控方案
本节介绍:多服务器之间传输文件的方式,如:第三方rsync同步工具,publish over ssh插件,publish over ftp插件,copyArtifact插件,Copy DataTo Workspace插件等
本节介绍:多环境配置插件、参数化扩展、通知(email,钉钉)、job文件夹组织插件(floders plugins)等
案例包含:dotnet,dotnet core、docker,ios\android app、nodejs项目(webpack)
Jenkins 是基于Java开发的一种可视化持续集成工具,将流水式的操作实现自动化。常用于自动化构建、自动化集成、自动化测试、自动化交付等
官方下载:https://jenkins.io/download/
根据jenkins安装过程中提示,安装对应版本的JRE
Jenkins在url中关闭和重启(exit,restart,reload)
主题美化
1)Jenkins安装插件因网络问题报错处理方案(卡在setupWizard)
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 bat中可执行的命令 curl -X POST http://IP:8080/job/auto-publish-folder/job/job-name/buildWithParameters --user admin:admin -d p_app_key=Api
二、 常见设置
Jenkins 中文乱码
环境变量、脚本变量使用
Jenkins可用环境变量列表以及环境变量的使用(Shell/Command/Maven/Ant)
Jenkins 环境变量管理(全局环境变量< Slave 配置环境变量< Job 参数< Job injected 环境变量)
Environment Injector 插件(EnvInject):添加的环境变量,只有这个job的构建过程中可见,其他jobs的构建不可见
系统环境:系统环境变量变了后,jenkins脚本工具无法立刻加载最新的。比如powershell 使用 dir env: 命令可以打印当前加载到的系统环境变量,不是最新的可以重启jenkins
powershell中访问全局密码和凭证密码 (备用地址) (EnvInject插件和Credentials Binding插件两种方式)
查看job执行时的历史环境变量方法:当前job执行记录 – 控制台输出 - Environment Variables
定时构建
Jenkins job未按设置的时间执行 (时区设置)
Jenkins修改Job工作空间、修改日志路径(比如git下载到指定目录)
三、 常用工具cli
1) git
jenkins 同时拉取多个git仓库(插件:multiple-scms)
jenkins选择分支构建(插件:git Parameters)
webhook
jenkins 插件Generic Webhook Trigger的使用
2) 脚本
a)shell
( 一般以.sh为文件后缀,脚本开头必须是 #!/bin/bash )
b)windows bat
bat中errorlevel与%errorlevel%的区别
iis7 appcmd命令:操作站点start|stop,操作应用程序池start|stop|recycle(回收)
c)powershell
powershell 中是不区分大小写的(但是linux区分,所以区分大小写是好习惯)
微软宣布PowerShell 7 Linux/macOS/Windows全平台兼容
跨平台PowerShell如何远程管理Linux/Mac/Windows?
语法
传递枚举的案例:$_.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)
jenkins 控制台输出powershell执行代码行(Set-PSDebug -Trace 1)
JSON
发布
利用PowerShell+Jenkins,实现项目的自动化部署
Powershell远程管理Windows Server(WinRM)相关安全配置,否则服务器会拒绝远程管理
其他
Sample all PowerShell Console Colors
PowerShell中使用Test-Path命令检查文件或文件夹路径是否存在示例
异常
1) try…catch…
2) echo $LASTEXITCODE。一般命令正确执行返回0,失败返回非0值。
3) xcopy
eg:xcopy D:\Source D:\Dest /e/i/y/d
/D:m-d-y 复制在指定日期或指定日期以后改变的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。
4) 7zip(7z)
四、 安全设置
用户权限管理
Jenkins权限控制插件Role-based Authorization Strategy
五、 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
3)使用msbuild命令行
项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦)
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内容如下
<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版本 |
3)dotnet core 发布命令
dotnet restore
dotnet publish
jenkins:job配置信息变更历史记录(Job Configuration History 插件)
jenkins配置备份、还原
手动备份、还原
备份JENKINS_HOME下的所有文件和文件夹,恢复的时候先停止jenkins服务。
(JENKINS_HOME 是jenkins > 系统管理 > 系统配置> 主目录的值)
使用SCM Sync configuration 插件备份到github上
站点应用备份
Jenkins实现生产环境部署文件的回滚操作(Windows)
jenkins master 高可用设计方案
Jenkins Pipeline 高可用设计方法(值得深入研究)
七、 文件传输
1) Rsync同步工具
Rsync 是一个通过检查文件的时间戳和大小,来跨计算机系统高效地“差异”传输和同步文件的工具
第一次同步时rsync 会复制全部内容(首次复制时没有压缩包快),但在下一次只传输“修改过”的文件。
-u, --update 仅仅进行更新,即跳过所有DST中更加新的文件
权限问题
(1) rsync客户端下载文件,文件权限会加入运行 rsync客户端命令 的账户
(2) 上传文件到rsync服务端,文件权限会加入运行 rsync服务端服务 的账户
服务端密码文件权限问题:rsync4.10 自带的(chmod.exe+chown.exe)
windows下批量修改文件(或文件夹)权限或所有者(icacls命令)
路径问题:
Cygpath命令可以实现windows平台和Linux的目录名转换。
例:cygpath –u C:\\windows
/cygdrive/c/windows
安装:安装Cygwin时,会一起安装Cygpath工具
2) Publish over SSH 插件
3) Publish Over FTP 插件
Jenkins的FTP上传插件Publish Over FTP Plugin设置支持中文路径
4) CopyArtifact插件
5) Copy Data To Workspace插件
其他
八、 分布式构建
1)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
2)多job串行、并行
Jenkins上下游jobs设置(并行、串行)-- multijob 插件
(使用multijob 插件:master 和 slave 节点 的“执行者数量”设置多些,否则子job过多,就没法并发而互相卡死)
在多job中,有个共用组件,如果得不到优先被调用,可能导致达到jenkins最大并行数,而互相等待出现卡死的情况
3)pipeline
Jenkins Pipeline 纯脚本,效率高。相对jenkins UI,入门门槛高,配置可读性差,维护难。使用multijob插件,可视化UI配置更加简单易用。Multijob 中包含的独立job,不能是pipe类型
Jenkins pipeline:pipeline 使用之语法详解
Jenkins2 插件 Pipeline+BlueOcean 实现持续交付的初次演练
4)触发JENKINS远程构建
方式一:插件Parameterized Remote Trigger
2. Credentials Authentication方案
(设置了”系统凭证”触发不了远程job。那么改为”全局凭证”)
(优化:单独设置一个执行远程job的账户,权限可控性高,日志里能查执行者)
方式二:HTTP URL 触发JENKINS远程构建
5)ssh方式
九、 自动化测试
Jenkins之插件Publish HTML reports的使用
Postman+Newman+jenkins实现API自动化测试
sonarqube与dotnetcore
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',可以忽略
使用description setter 插件设置构建描述(eg:重要参数显示、APP二维码等)
2)视图管理、执行大屏显示、任务执行状态颜色控制
1、Jenkins 利用Dashboard View插件管理任务视图
2、jenkins视图插件build monitor view
3、插件名:Green Balls。使用绿色代替默认的蓝色表示任务运行成功的状态
3)日志大小的问题
Avoid large log Jenkins file (and stop build if needed)
(安装 Logfilesizechecker 插件和 build timeout 插件并在系统设置里面设置阈值)
4)job并发构建
十一、 其他插件
提示:不使用的插件可以自行卸载掉,因为插件多了经常会提示你更新
多环境多配置插件(旧名:multi-configuration)
job参数化扩展:extended choice parameter (单选,多选,读取文件中的选项)
jenkins插件build timeout和build timestamp
Email通知功能
jenkins配置自动发送邮件(插件:Email Extension)
提示:将模板文件放到$JENKINS_HOME/email-templates目录下,如果没有这个目录,自己创建该目录。
钉钉通知
Folders Plugin插件:允许将job组织成有层次的文件夹(支持权限管理)
jenkins 的 folders plugin 是做什么用的?
organize jobs in hierarchical folders
十二、 解决方案与案例
Dotnet应用
Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现
IOS\Android APP应用
使用Jenkins搭建iOS/Android持续集成打包平台
nodejs项目(webpack打包)
Docker
Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD
Jenkins docker部署jenkins,共享宿主机docker资源
Jenkins X 相关文章:
Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。
Jenkins X实践系列(2) —— 基于jx的DevOps实践
CICD 架构实践
===================================================
over。资料很多,足够你从入门到放弃。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
作者:滴答的雨
出处:http://www.cnblogs.com/heyuquan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎园友讨论下自己的见解,及向我推荐更好的资料。
本文如对您有帮助,还请多帮 【推荐】 下此文。
谢谢!!! (*^_^*)
技术群:(339322839广西IT技术交流),欢迎你的加入