[CI&CD]jenkins自动化工具使用教程

 

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

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

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安装过程中提示,安装对应版本的JRE

JER下载官网

 

安装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插件之环境变量插件EnvInject

      Jenkins 环境变量管理(全局环境变量< Slave 配置环境变量< Job 参数< Job injected 环境变量)

      Environment Injector 插件(EnvInject):添加的环境变量,只有这个job的构建过程中可见,其他jobs的构建不可见

系统环境:系统环境变量变了后,jenkins脚本工具无法立刻加载最新的。比如powershell 使用 dir env: 命令可以打印当前加载到的系统环境变量,不是最新的可以重启jenkins

powershell中访问全局密码和凭证密码   (备用地址) (EnvInject插件和Credentials Binding插件两种方式)

 

 

查看job执行时的历史环境变量方法:当前job执行记录 控制台输出 - Environment Variables

去掉jenkins的首页告警信息(eg:插件更新信息)

定时构建

        Jenkins 定时构建语法规则

        Jenkins设置定时任务未生效

        Jenkins job未按设置的时间执行 (时区设置)

Jenkins自动丢弃构建历史数据(释放空间)

Jenkins修改Job工作空间、修改日志路径(比如git下载到指定目录)

Jenkins重置build序号

三、    常用工具cli

1)   git

jenkins git拉取代码

jenkins 同时拉取多个git仓库(插件:multiple-scms

jenkinsfile 同时检出多个 Git 仓库

jenkins选择分支构建(插件:git Parameters

webhook

    jenkins 插件Generic Webhook Trigger的使用

    jenkins:Webhook触发多分支项目构建 

 

2)   脚本

a)shell

Shell 脚本常用命令

      ( 一般以.sh为文件后缀,脚本开头必须是  #!/bin/bash )

b)windows bat

bat教程

批处理FOR参数/Ftokens详解

遍历文件夹&字符串处理 

baterrorlevel%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)   7zip7z

7zipdos命令行用法总结

四、    安全设置

jenkins全局安全设置

用户权限管理

      自带的权限管理

      Jenkins权限控制插件Role-based Authorization Strategy

      Jenkins - Jenkins 修改用户密码

      忘记Jenkins管理员密码的解决办法

五、    Dotnet 程序编译发布

1)环境准备

使用vs安装包,安装组件:roslynmsbuildwebdeploy、对应版本的.net frameworknuget

 

这样安装后,编译时依然可能出现环境问题。比如:dll不存在等等

解决办法:打包开发环境msbuild目录拷贝到服务器上。( eg:打包 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild 目录)

 

 

2)Msbuild插件 + webdeploy

Git + msbuild插件 + webdeploy

3)使用msbuild命令行

MSBuild 命令行编译项目且不包含pdb文件

项目文件中的已知属性(知道了这些,就不会随便在 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文件(jscsscshtml等)的输出目录

toolsversion

根据.csproj里面的值进行设置。15.0对应vs2017msbuild

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 使用方法

JenkinsFTP上传插件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过多,就没法并发而互相卡死)

Jenkins任务优先级插件

      在多job中,有个共用组件,如果得不到优先被调用,可能导致达到jenkins最大并行数,而互相等待出现卡死的情况

3)pipeline

Jenkins Pipeline 纯脚本,效率高。相对jenkins UI,入门门槛高,配置可读性差,维护难。使用multijob插件,可视化UI配置更加简单易用。Multijob 中包含的独立job,不能是pipe类型

Jenkins Pipeline的总体介绍

Jenkins pipelinepipeline 使用之语法详解

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,docker实现自动化部署(持续交互)

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

Jenkins docker部署jenkins,共享宿主机docker资源

 

 

       Jenkins X 相关文章:

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

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

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

 

      CICD 架构实践

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

 

 

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

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

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

posted on 2019-01-14 09:37  滴答的雨  阅读(10364)  评论(4编辑  收藏  举报