jenkins自动化工具使用教程
自动化构建、测试、部署、代码检测越来越重要。主要有一下几点原因
1. 企业做大,项目变多,多端支持(web,h5,小程序等)
2. 微服务提倡高内聚低耦合,项目因拆分变多
3. DevOps自动化运维流行
4. 集群化,高可用部署方案
5. 避免人工操作出现的错误
6. 集成管理系统,实现提交发布、发布审批、发布等UI可视化操作
等等原因,学习使用jenkins实现自动化作业非常有必要。这是我学习过程中整理的资料,分享给大家。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
目录
本节介绍jenkins常见设置,如中文、job变量使用、查看job历史执行变量、定时构建、清理历史构建等
本节介绍:git、脚本(shell、bat、powershell),xcopy、7zip等工具
本节介绍jenkins安全设置,用户权限管理
六、 高可用... 7
本节介绍:jenkins master 高可用设计方案、jenkins配置备份、配置变更历史、站点应用备份回滚、监控方案
本节介绍:多服务器之间传输文件的方式,如:第三方rsync同步工具,publish over ssh插件,publish over ftp插件,copyArtifact插件,Copy DataTo Workspace插件等
2) 视图管理、执行大屏显示、任务执行状态颜色控制... 11
本节介绍:多环境配置插件、参数化扩展、通知(email,钉钉)、job文件夹组织插件(floders plugins)等
案例包含:dotnet,dotnet core、docker,ios\android app、nodejs项目(webpack)
一、 安装
Jenkins 是基于Java开发的一种可视化持续集成工具,将流水式的操作实现自动化。常用于自动化构建、自动化集成、自动化测试、自动化交付等
官方下载:https://jenkins.io/download/
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]传递自定义变量:job内部步骤传递& job之间传递
Jenkins环境变量管理(全局环境变量< Slave 配置环境变量< Job 参数< Job injected 环境变量)
Environment Injector 插件(EnvInject):添加的环境变量,只有这个job的构建过程中可见,其他jobs的构建不可见
系统环境:系统环境变量变了后,jenkins脚本工具无法立刻加载最新的。比如powershell 使用 dir env: 命令可以打印当前加载到的系统环境变量,不是最新的可以重启jenkins
查看job执行时的历史环境变量方法:当前job执行记录 – 控制台输出 - Environment Variables
定时构建
Jenkins修改Job工作空间、修改日志路径(比如git下载到指定目录)
三、 常用工具cli
1) git
Failed to connect to repository:Error performing command:git.exe ls-remote-h
jenkins 同时拉取多个git仓库(插件:multiple-scms)
jenkins选择分支构建(插件:git Parameters)
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命令行
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过多,就没法并发而互相卡死)
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 X 相关文章:
Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。
Jenkins X实践系列(2) —— 基于jx的DevOps实践
CICD 架构实践
===================================================
over。资料很多,足够你从入门到放弃。
欢迎向我推荐更好的资料和讨论关于jenkins的问题。
jenkins自动化工具使用教程的更多相关文章
- jenkins自动化工具使用教程(转)
自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 DevOps自动化运维流行 集群化,高可 ...
- Python 任务自动化工具 tox 教程
在我刚翻译完的 Python 打包系列文章中,作者提到了一个神奇的测试工具 tox,而且他本人就是 tox 的维护者之一.趁着话题的相关性,本文将对它做简单的介绍,说不定大家在开发项目时能够用得上. ...
- 自动化工具-jenkins
jenkins自动化工具使用教程 自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 Dev ...
- netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了
在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不 是特别麻烦...现如今你的项目需要在li ...
- Jenkins自动化部署入门详细教程
大纲 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试: 或者前后端分离后,经常会修改接口,然后重新部署 ...
- Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- C#最佳工具集合:IDE、分析、自动化工具等
C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言.如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理.但是,这个工具列表可能会 ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
随机推荐
- js数据结构与算法——队列
<script> //创建一个队列 function Queue(){ let items = []; //向队尾添加一个新的项 this.enqueue = function(eleme ...
- 网络流24题——骑士共存问题 luogu 3355
题目描述:这里 从这里开始,我们涉及到了一个新的问题:最小割问题 首先给出一些定义(本人根据定义自己口胡的): 一个流网络中的一个割是一个边集,使得割掉这些边集后源点与汇点不连通 而最小割问题就是一个 ...
- Mysql exists 与 in
今天公司同事反馈一个SQL语句删除数据删除了一个小时,还没有删除完,强制中断. 第一眼看到 exists 的时候,脑子里要有这么个概念: Oracle exists 的效率比in 高.而Mysql 则 ...
- Linux密码重置
在启动菜单选择启动内核: 按e编辑,编辑修改两处:ro改为rw,和找到rhgb quiet一行: 把rhgb quiet替换为init=/bin/bash(临时生效): 按CTRL+X进入单用户模式: ...
- 【Vue】删除数组元素,导致剩余元素被重新渲染
最近在项目中有使用Vue,然而在开发过程中发现,当我对数组中的元素进行删除时,会导致该元素后面的元素没有被重新渲染. html代码如下:有两个组件:一个是Main组件,用来包含所有的内容容器:一个是子 ...
- 安装SSL证书 and 根域名跳转www域名
1.安装自签证书 自签证书也就是不被公网认可的证书,可在局域网内进行签名认证,其12306也是自签证书,通过证书+nginx代理web服务器 可以实现https连接 一.使用OpenSSL创建证书 ...
- Core在类中注入
private readonly IHttpClientFactory _iHttpClientFactory; public static NetHelper Get = new NetHelper ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165319
安装kali 我从网上找了相应教程一步一步跟着走,教程链接:(https://blog.csdn.net/qq_40950957/article/details/80468030) 安装成功: 配置共 ...
- 如何从Eclipse导入github上的项目源码--转载
[转载出处声明:hil2000的专栏] 1.首先在github.com上申请一个账号,比如笔者的账号为puma0072.Eclipse需要安装egit插件,在Eclipse中选择help->Ma ...
- VS2013+ffmpeg开发环境搭建
VS2013+ffmpeg开发环境搭建 转 https://blog.csdn.net/u014253332/article/details/86657868 一.准备ffmpeg相对应开发dll.i ...