Jenkins
2020-11-04 20:42:53 0 举报
AI智能生成
Jenkins研学思维导图
作者其他创作
大纲/内容
概念
是什么
开源自动化服务器
干什么
持续、自动地构建/测试软件项目
CI(Continuous integration,持续集成):
开发人员提交了新代码之后,立刻进行构建、(单元)测试
开发人员提交了新代码之后,立刻进行构建、(单元)测试
CD(Continuous Delivery, 持续交付):
在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中
在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中
监控一些定时执行的任务
入门
安装
系统要求
最小推荐配置:
- Java 8(JRE或JDK)
- 256MB可用内存
- 1GB +可用磁盘空间
推荐配置小团队:
- Java 8
- 1GB +免费内存
- 50GB +可用磁盘空间
平台
Docker
WAR文件
macOS
Linux
Windows
其他操作系统
安装后
解锁 Jenkins
术语
Agent
通常是一个机器或者容器, 它连接到 Jenkins 的主服务器并在主服务器的指示下执行任务
Artifact
在Build或Pipeline 运行期间生成的不可变文件,该文件归档到Jenkins Master上以供用户随后检索。
Build
项目 单次执行的结果
Cloud
提供动态代理 配置和分配的系统配置
Core
提供基本的 web UI, 配置, 和 Plugins构建的基础
Downstream
配置Pipeline或项目时被触发作为一个单独的Pipeline或项目的执行的一部分。
Executor
一个工作的执行位置 ,由Node上的 Pipeline 或 Project定义
Fingerprint
用于追踪Artifact或其他跨多个Pipelines 或 Projects的实体的使用
Folder
用于 Pipelines 和/或 Projects的组织容器, 类似于文件系统的文件夹。
Item
web UI中的一个实体, 对应于以下任一个: Folder, Pipeline, 或Project。
Job
一个不赞成使用的一个术语, Project的同义词
Label
用于分组Agents的用户定义的文本, 通常使用类似的功能和功能
Master
中心, 协调保存配置, 加载插件,和呈现给Jenkins各种用户界面的过程
Node
作为Jenkins环境的一部分并能够执行Pipeline或项目的机器。无论是the Master还是Agents都被认为是Nodes。
Project
应该执行的工作的用户配置描述 , 比如 构建一个软件, 等等。
Pipeline
用户定义的连续输送Pipeline模型
Plugin
Jenkins功能的扩展,由Jenkins 核心分别提供。
Publisher
完成所有已配置的发布报告, 发送通知等 Steps之后Build的部分
Stage
是流水线的一部分, 用于定义整个流水线的概念上不同的子集
Step
单一任务从根本上讲,指的是Jenkins 在Pipeline或项目中做了什么
Trigger
触发新Pipeline运行或构建的标准。
Update Center
托管了插件和插件元数据的库,用来支持在Jenkins内部安装插件。
Upstream
配置的Pipeline或项目,其触发单独的Pipeline或项目作为其执行的一部分。
Workspace
Noede文件系统上的一次性目录, 可以由Pipeline或项目完成工作
操作面板
New Item(新建任务)
任务名称
类型
自由风格项目
Maven项目
Pipeline
General 标签页
源码管理(SCM, Source Code Management)
CVS
CVS Projectset
Git
GitHub
GitLab
Subversion
Build Triggers构建触发器
build whenever a snapshot dependency is built
当job依赖的快照版本被build时,执行本job
build after other projects are built
当本job依赖的job被build时,执行本job
Build periodically
定时执行构建任务,不管远程代码分支上的代码是否发生变化,都执行一次构建。
Build when a change is pushed to GitHub
github项目的触发规则
Poll SCM
设置定时检查代码仓库是否有变更,有变更则构建
Build Environment 构建环境
阻塞后的操作
添加控制台输出日期
Build 标签页
增加构建的步骤
Post-build Action 标签页
People(用户列表)
用户账户信息
Build History(构建历史)
查看项目的构建历史
Project Relationship (项目关系)
项目关系,上游项目和下游项目
Check File Fingerprint (检查文件指纹)
检查文件指纹验证
系统管理
系统设置
全局安全设置
凭据配置
全局工具配置
读取设置
插件管理
系统信息
系统日志
负载统计
Jenkins 命令行接口
脚本命令行
节点管理
关于 Jenkins
管理旧数据
管理用户
In-process Script Approval
准备关机
My Views(我的视图)
用户的项目任务
Lockable Resources
显示可锁定的资源
Credentials(凭据)
New View(新建视图)
管理
安全
工具
Ant
Ant build step
Git
JDK
Maven
插件
安装
常用
Docker
Kubernetes
Git Parameter
GitLab
GitLab Hook
Maven
SonarQube Scanner
Pipeline:Job
Email Extension
Pipline(流水线)
概念
基于 Jenkins Pipeline,用户可以在一个 JenkinsFile 中快速实现一个项目的从构建、测试以到发布的完整流程,灵活方便地实现持续交付,并且可以保存和管理这个流水线的定义。
优点
自动地为所有分支创建流水线构建过程并拉取请求。
在流水线上代码复查/迭代 (以及剩余的源代码)。
对流水线进行审计跟踪。
该流水线的真正的源代码, 可以被项目的多个成员查看和编辑。
使用条件
Jenkins 2.x或更高版本
安装了Pipeline插件
创建方式
pipeline script : 直接script输入框里面输入pipeline script语句即可
pipeline script from SCM : 配置代码存储地址,并指定Jenkinsfile路径
JenkinsFile
脚本式(Scripted Pipeline)
声明式(Declarative)
字符串插值
使用与 Groovy 相同的规则进行字符串插值。例如:${username}
使用环境变量
BUILD_ID
当前构建的 ID
BUILD_NUMBER
当前构建号
BUILD_TAG
构建标签
BUILD_URL
构建结果的 URL
EXECUTOR_NUMBER
当前构建的执行者的唯一编号
JAVA_HOME
JDK 的 JAVA_HOME
JENKINS_URL
Jenkins 服务器的完整 URL
JOB_NAME
本次构建的项目名称
NODE_NAME
运行本次构建的节点名称
WORKSPACE
workspace 的绝对路径
处理凭据
credentials() 辅助方法(在environment 指令中使用)
Secret 文本
带密码的用户名
Secret 文件
withCredentials( ... ) { ... }
SSH User Private Key
Certificate
parallel 并行执行
支持跨不同平台串联地运行测试
通过 parallel 定义并发步骤
对耗时长,相互不存在依赖的stage可以使用此方式提升运行效率
除了parallel stage,单个parallel里的多个step也可以使用并行的方式运行
语法
声明式流水线
流水线顶层必须是一个 block, 具体来说是: pipeline { }
没有分号作为语句分隔符,,每条语句都必须在自己的行上
块只能由 节段, 指令, 步骤, 或赋值语句组成
属性引用语句被视为无参方法调用。 例如, input被视为 input()
Sections:声明式流水线中的节段通常包含一个或多个 指令 或 步骤。
agent(代理)
通过 agent 定义整个Pipeline或特定阶段的执行环境,实现灵活调度资源
Agent在Pipeline中必需存在
参数
any : 在任何可用的agent 上执行Pipeline或stage
none : 当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分
label : 指定具体的 Jenkins Slave Node,也可以单独指定Stage的执行环境
docker : 执行Pipeline或stage时会动态启动一个docker节点执行Pipelines,还可以接受一个args,直接传递给docker run调用
dockerfile : 使用从Dockerfile源存储库中包含的容器来构建执行Pipeline或stage
node : 在node中可以定义 label 和 customWorkspace(自定义运行的工作空间)等
post
通过 post 定义资源清理、通知等,也就是定义Pipeline或stage运行结束时的操作
与Stages平级
有多种不同的condition: always、success、failure、unstable、changed
always : 总是运行,无论Pipeline运行的完成状态如何。
changed : 只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
failure : 仅当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
success : 仅当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
unstable : 仅当前Pipeline具有“不稳定”状态时才运行,通常在具有黄色指示的Web UI中表示。
aborted : 只有当前Pipeline处于“中止”状态时,才会运行,通常在具有灰色指示的Web UI中表示。
stages(阶段)
是stage的集合,Pipeline完成的所有实际工作都将包含在一个或多个stage指令中
至少包含一个stage指令,用于连接各个交付过程,如构建,测试和部署等
steps(步骤)
包含一个或多个具体操作步骤
script步骤可以提供一个有效的功能增强
指令
environment
制定一个 键-值对序列
顶层流水线块中使用的 environment 指令将适用于流水线中的所有步骤
在一个 stage 中定义的 environment 指令只会将给定的环境变量应用于 stage 中的步骤
助手方法 credentials() 定义,该方法可以在 Jenkins 环境中用于通过标识符访问预定义的凭证
options
允许从流水线内部配置特定于流水线的选项
可用选项
buildDiscarder:为最近的流水线运行的特定数量保存组件和控制台输出
disableConcurrentBuilds:不允许同时执行流水线。 可被用来防止同时访问共享资源等。
overrideIndexTriggers:允许覆盖分支索引触发器的默认处理。
skipDefaultCheckout:在`agent` 指令中,跳过从源代码控制中检出代码的默认情况。
skipStagesAfterUnstable:一旦构建状态变得UNSTABLE,跳过该阶段。
checkoutToSubdirectory:在工作空间的子目录中自动地执行源代码控制检出。
timeout:设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。
retry:在失败时, 重新尝试整个流水线的指定次数。
timestamps:预谋所有由流水线生成的控制台输出,与该流水线发出的时间一致。
阶段选项
skipDefaultCheckout:在 agent 指令中跳过默认的从源代码控制中检出代码。
timeout:设置此阶段的超时时间, 在此之后, Jenkins 会终止该阶段。
retry:在失败时, 重试此阶段指定次数。
timestamps:预谋此阶段生成的所有控制台输出以及该行发出的时间一致。
parameters
string:字符串类型的参数,
booleanParam:布尔参数,
triggers
cron:接收 cron 样式的字符串来定义要重新触发流水线的常规间隔
pollSCM:接收 cron 样式的字符串来定义一个固定的间隔,在这个间隔中,Jenkins 会检查新的源代码更新
upstream:接受逗号分隔的工作字符串和阈值。 当字符串中的任何作业以最小阈值结束时,流水线被重新触发。
stage
在该stages部分中
包含步骤部分
可选agent部分或其他特定于阶段的指令
tools
定义自动安装和放置 PATH 的工具的一部分
支持工具
maven
jdk
gradle
input
允许你使用 input step提示输入
配置项
message
在用户提交 input 时呈现给用户
必需
id
默认为 stage 名称
可选
ok
`input`表单上的"ok" 按钮文本
可选
submitter
以逗号分隔的用户列表或允许提交 input 的外部组名。默认允许任何用户
可选
submitterParameter
环境变量的名称
可选
parameters
提示提交者提供的参数列表
可选
when
允许流水线根据给定的条件决定是否应该执行阶段
必须包含至少一个条件
包含多个条件, 所有的子条件必须返回True,阶段才能执行
内置条件
branch
当正在构建的分支与模式给定的分支匹配时执行
只适用于多分支流水线
environment
当指定的环境变量是给定的值时执行
expression
当指定的Groovy表达式评估为true时,执行
not
当嵌套条件是错误时,执行
allOf
当所有的嵌套条件都正确时,执行
必须包含至少一个条件
anyOf
当至少有一个嵌套条件为真时,执行
必须包含至少一个条件
parallel
声明多隔嵌套阶段, 它们将并行执行
一个阶段必须只有一个 steps 或 parallel 的阶段
嵌套阶段本身不能包含进一步的 parallel 阶段, 但是其他的阶段的行为与任何其他 stage 相同
任何包含 parallel 的阶段不能包含 agent 或 tools 阶段, 因为他们没有相关 steps
failFast
添加 failFast true 到包含 parallel`的 `stage 中, 当其中一个进程失败时,你可以强制所有的 parallel 阶段都被终止。
Docker
使用 Docker 在机器之间统一构建和测试环境, 并为部署应用程序提供有效的机制
使用args命令参数
支持同时使用多个容器
Dockerfile
使用 agent { dockerfile true } 语法从 Dockerfile 中构建一个新的镜像而不是从 Docker Hub中拉取
指定Docker标签
高级用法
运行 "sidecar" 容器
Docker 流水线可以"在后台"运行一个容器 , 而在另外一个容器中工作
构建容器
使用语法 docker.build("my-image-name"),能够使用后续 Docker流水线调用的返回值
在流水线运行期间从存储库的`Dockerfile` 中创建一个新的镜像
push() 方法将Docker 镜像发布到 Docker Hub,push() 方法接受可选的 tag 参数, 允许流水线使用不同的标签 push
默认情况下, build() 方法在当前目录构建一个 Dockerfile。提供一个包含 Dockerfile`文件的目录路径作为`build() 方法的第二个参数 就可以覆盖该方法
使用远程 Docker 服务器
使用`withServer()` 方法
预先配置的 Docker Server Certificate Authentication的证书ID
使用自定义仓库
默认情况下, Docker 流水线 集成了 Docker Hub默认的 Docker镜像仓库
使用 withRegistry() 方法完成步骤,传入自定义仓库的URL
对于需要身份验证的Docker 仓库, 从Jenkins 主页添加一个 "Username/Password" 证书项, 并使用证书ID 作为 `withRegistry()`的第二个参数
Multibranch Pipeline(多分支流水线)
扩展共享库
全局共享库
文件夹级别的共享库
自动分享库
最佳实践
瓶颈
频繁将临时数据写入磁盘,以便于运行流水线能够处理意外的Jenkins重启或系统崩溃
特性
速度
持久性
配置要求
Jenkins LTS 2.73+ 或以上版本 (或者 weekly 2.62+)
下面的*all*流水线插件 , 至少安装指定的最低版本:
API (workflow-api) v2.25
Groovy (workflow-cps) v2.43
Job (workflow-job) v2.17
Supporting APIs (工作流支持) v2.17
多分支 (工作流多分支) v2.17 - 可选, 只需要为多分支流水线启动该设置。
模式
P性能优化模式 ("PERFORMANCE_OPTIMIZED") - Greatly 减少磁盘 I/O。 如果流水线没有完成 ,Jenkins 没有优雅地关闭, 它们可能会像上面的自由式项目一样丢失数据
最大持久性 ("MAX_SURVIVABILITY") - 像之前的流水线中所做的那样, 最慢的选项。 使用它来运行你最重要的流水线。
不那么持久, 稍微快一些("SURVIVABLE_NONATOMIC") -每一步都写入数据,但是避免了原子写入。 这比更大耐久性模块要快, 尤其是在网络文件系统上。
如何设置
Globally, 在 "管理Jenkins" > "系统配置"下你可以选择一个全局默认 durability设置 , 标记 "流水线速度/持久性设置"。
Per pipeline job: 在作业配置的顶部, 标记 "自定义流水线速度/持久性级别" - 它会覆盖全局设置。或者, 使用 "属性" 步骤 - 该设置将会应用到该步骤执行后的下一次运行(相同的结果)。
Per-branch for a multibranch project: 配置自定义分支属性策略 (在SCM下)并为自定义流水线速度/持久性级别添加属性。它会覆盖全局设置。或者使用 "属性" 步骤来覆盖设置,但请记住,你可能需要再次运行该步骤来撤销该设置。
推荐
对大多数流水线使用 "性能优化" 模式 ,尤其是基本的构建测试流水线或任何可以在需要时再次运行的东西
使用 "最大持久性" 和 "不那么持久" 的流水线模式 ,你需要你需要有保证的执行记录(auditing). 这些记录运行在每一步。
当流水线修改关键基础设施的状态时,使用 "最大持久性" 和 "不那么持久"。比如, 用于产品部署。
为持久性设置设置"性能优化"的全局默认值 (见上文), 然后 在特定的流水线作业或多分支流水线的分支 ("主分支" 或发布分支)中设置 "最大持久性"。
可以强制地让流水线暂停来保存数据。
其他建议
只要有可能,请使用具有快速SSD支持的存储而不是硬盘驱动器运行Jenkins。
使用构建代理运行一个复杂的过程时, 写一个简短的 Shell/Batch/Groovy/Python 脚本
使用流水线插件和脚本安全的最新版本
通过减少运行的步骤数量和使用更简单的 Groovy 代码来简化脚本化流水线的代码
合并相同类型的顺序步骤, 比如通过使用 Shell步骤 来调用helper脚本而不是运行多个步骤
尝试通过流水线限制写入日志的数据量
使用超过6MB的Jenkins时,使用 “建议的垃圾收集调优”选项 来减少垃圾收集的暂停时间和开销
Blue Ocean
意图
为pipeline 提供绝佳的体验
特性
持续交付(CD)Pipeline的 复杂可视化
Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人
个性化 以适应团队中每个成员不同角色的需求。
在需要干预和/或出现问题时 精确定位
本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力
安装
创建流水线
仪表盘
活动视图
流水线运行细节视图
流水线编辑器
参考文献
https://www.jenkins.io/zh/doc/
https://www.w3cschool.cn/jenkins/
0 条评论
下一页