jenkins自动化工具使用教程

时间:2023-03-09 04:44:07
jenkins自动化工具使用教程

自动化构建、测试、部署、代码检测越来越重要。主要有一下几点原因

1.  企业做大,项目变多,多端支持(web,h5,小程序等)

2.  微服务提倡高内聚低耦合,项目因拆分变多

3.  DevOps自动化运维流行

4.  集群化,高可用部署方案

5.  避免人工操作出现的错误

6.  集成管理系统,实现提交发布、发布审批、发布等UI可视化操作

等等原因,学习使用jenkins实现自动化作业非常有必要。这是我学习过程中整理的资料,分享给大家。

欢迎向我推荐更好的资料和讨论关于jenkins的问题。

目录

一、       安装

1)       Jenkins安装插件因网络问题报错处理方案

2)       如何将Jenkins集成到其他系统... 3

二、       常见设置... 3

本节介绍jenkins常见设置,如中文、job变量使用、查看job历史执行变量、定时构建、清理历史构建等

三、       常用工具cli

. 4

本节介绍:git、脚本(shell、bat、powershell),xcopy、7zip等工具

四、       安全设置... 5

本节介绍jenkins安全设置,用户权限管理

... 5

五、       Dotnet 程序编译发布

六、       高可用... 7

本节介绍:jenkins master 高可用设计方案、jenkins配置备份、配置变更历史、站点应用备份回滚、监控方案

七、       文件传输

... 7

本节介绍:多服务器之间传输文件的方式,如:第三方rsync同步工具,publish over ssh插件,publish over ftp插件,copyArtifact插件,Copy DataTo Workspace插件等

八、       分布式构建... 9

1)       master-slave. 9

2)       多job串行、并行... 9

3)       pipeline. 9

4)       触发JENKINS远程构建

5)       ssh方案

... 9

九、       自动化测试... 10

十、       优化设置... 10

1)       设置友好的构建记录名字、构建描述内容

2)       视图管理、执行大屏显示、任务执行状态颜色控制... 11

3)       日志大小的问题... 11

4)       job并发构建... 11

十一、       其他插件... 11

本节介绍:多环境配置插件、参数化扩展、通知(email,钉钉)、job文件夹组织插件(floders plugins)等

十二、       解决方案与案例

... 12

案例包含:dotnet,dotnet core、docker,ios\android app、nodejs项目(webpack)

一、    安装

Jenkins 是基于Java开发的一种可视化持续集成工具,将流水式的操作实现自动化。常用于自动化构建、自动化集成、自动化测试、自动化交付等

官方下载:https://jenkins.io/download/

安装Jenkins

怎么在jenkins面板上面升级

Jenkins在url中关闭和重启(exit,restart,reload)

主题美化

Jenkins theme 生成定制主题css

jenkins-material-theme

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安装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的异常

1) try…catch…

2) 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等

jenkins自动化工具使用教程

这样安装后,编译时依然可能出现环境问题。比如: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内容如下

<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配置备份、还原

使用thinbackup插件进行备份、还原

手动备份、还原

备份JENKINS_HOME下的所有文件和文件夹,恢复的时候先停止jenkins服务。

(JENKINS_HOME  是jenkins > 系统管理 > 系统配置> 主目录的值)

使用SCM Sync configuration 插件备份到github上

站点应用备份

Jenkins实现生产环境部署文件的回滚操作(Windows)

jenkins:一键回滚站点集群

jenkins master 高可用设计方案

Jenkins Pipeline 高可用设计方法(值得深入研究)

Jenkins分布式集群设计方案

jenkins双向备份;高可用部署;

Jenkins高可用方案汇总

jenkins系列之监控(monitoring插件)

七、    文件传输

1)   Rsync同步工具

Rsync 是一个通过检查文件的时间戳和大小,来跨计算机系统高效地“差异”传输和同步文件的工具

第一次同步时rsync 会复制全部内容(首次复制时没有压缩包快),但在下一次只传输“修改过”的文件。

Rsync服务端配置

基础cli命令

-u, --update 仅仅进行更新,即跳过所有DST中更加新的文件

rsync命令排除文件和文件夹(exclude-from)

rsync 自动创建目录的坑点(只支持创建一层目录)

权限问题

(1)  rsync客户端下载文件,文件权限会加入运行 rsync客户端命令 的账户

(2)  上传文件到rsync服务端,文件权限会加入运行 rsync服务端服务 的账户

服务端密码文件权限问题:rsync4.10 自带的(chmod.exe+chown.exe)

windows下批量修改文件(或文件夹)权限或所有者(icacls命令)

路径问题:

Cygwin 命令及常用设置的笔记

Cygpath命令可以实现windows平台和Linux的目录名转换。
                  例:cygpath –u C:\\windows
                         /cygdrive/c/windows
                  安装:安装Cygwin时,会一起安装Cygpath工具

Windows下Cygwin安装使用教程

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方案

5)ssh方式

基于win32-openssh搭建jenkins混合集群

Powershell中安装SSH模块,使用ssh命令

九、    自动化测试

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自动化工具使用教程

基于Jenkins,docker实现自动化部署(持续交互)

Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

Jenkins X 相关文章:

Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。

Jenkins X实践系列(1) —— 背景知识

Jenkins X实践系列(2) —— 基于jx的DevOps实践

CICD 架构实践

Jenkins多环境持续集成架构实践

===================================================

over。资料很多,足够你从入门到放弃。

欢迎向我推荐更好的资料和讨论关于jenkins的问题。