上一篇文章,我们一起来看了,用一个自由风格的方式来构建了一个简易的前端项目,我们还有另一种方式来完成这项工作,pipeline的方式去运行,
那么我们为什么要使用pipline呢?
本质上,jenkins是一个自动化引擎,它支持许多自动模式。通过标准的模板,创建一系列发布构建任务。支持从简单的持续集成到全面的 CD 管道的用例。通过对一系列相关任务进行建模,用户可以利用 Pipeline 的许多特性:
代码:管道在代码中实现,通常检查到源代码管理中,使团队能够编辑、审查和迭代他们的交付管道。
耐用:管道可以在 Jenkins 控制器的计划内和计划外重启中保存状态。
可暂停:流水线可以选择停止并等待人工输入或批准,然后再继续流水线运行。
多功能:管道支持复杂的CD部署 要求,包括分叉/加入、循环和并行执行工作的能力。
可扩展:Pipeline 插件支持对其DSL的自定义扩展 以及与其他插件集成的多个选项。
基于 Jenkins 可扩展性的核心价值,Pipeline 也可以由使用Pipeline Shared Libraries的用户和插件开发人员扩展。关于Pipeline Shared Libraries,我们会在之后的文章详细介绍
下面的流程图是在 Jenkins Pipeline 中轻松建模的一个 CD 场景的示例:
上面是来自官网的介绍,你可以访问下面的连接来查看
https://www.jenkins.io/doc/book/pipeline/
什么是pipeline?
关于流水线的运行,其实就想我们想的流水线一样,比如工厂的流水线。都是分阶段的,有机器各部分的装配,有出厂的测试。就像是Jenkins的stage。而流水线的(jenkinsfile),就是产品所经过的过程,比如:台式机转配过程和一体机就不一样。他们就经过了不同的流水线脚本。
Pipeline是Jenkins的核心功能,它提供了一组可扩展的工具。可以通过DSL语法可以完成从简单到复杂的交付流水线实现。Pipline可以过Jenkinsfile进行描述。
那么现在我们拥有了一个工厂(Jenkins),我们需要设计一个产品的生产线(Jenkinsfile),他会经过很多步骤(stage)。我们首先需要的就是编写Jenkinsfile
那么我们先聊一下Jenkinsfile的组成。enkinsfile使用两种语法进行编写,分别是声明式和脚本式。声明式和脚本式的流水线从根本上是不同的。声明式是jenkins流水线更友好的特性。脚本式的流水线语法,提供更丰富的语法特性。声明式流水线使编写和读取流水线代码更容易设计。
那么jenkinsfile到底是什么样子的呢?
jenkinsfile我们常用有4部分组成,agent、options、stages``post。
使用agent,指定node节点/workspace(定义好此流水线在某节点运行),timestamp需要安装插件Timestamper
agent { node {
label "master"
customWorkspace "${workspace}"
}
}
使用options 运行选项(定义好此流水线运行时的一些选项,例如输出日志的时间)
使用stages(stages包含多个stage,stage包含steps。是流水线的每个步骤)
//流水线的阶段
stages{
//阶段1 获取代码
stage("CheckOut"){
steps{
script{
println("获取代码")
}
}
}
stage("Build"){
steps{
script{
sh "pwd"
}
}
}
stage("Deploy"){
steps{
script{
println("进行部署")
}
}
}
}
使用post(定义好此流水线运行成功或者失败后,根据状态做一些任务,构建后的操作很重要),他有多重状态:
always: 总是执行脚本片段;success: 成功后执行;failure: 失败后的执行,比如我们可以失败以后发送邮件;aborted: 取消后执行。
post {
always{
script{
println("流水线结束后,经常做的事情")
}
}
success{
script{
println("流水线成功后,要做的事情")
}
}
failure{
script{
println("流水线失败后,要做的事情")
}
}
aborted{
script{
println("流水线取消后,要做的事情")
}
}
}
这样我们可以得到一个完整的jenkins的框架,文件内容如下:
pipeline{
//指定运行此流水线的节点
agent { node { label "build"}}
//流水线的阶段
stages{
//阶段1 获取代码
stage("CheckOut"){
steps{
script{
println("获取代码")
}
}
}
stage("Build"){
steps{
script{
println("运行构建")
}
}
}
stage("Deploy"){
steps{
script{
println("进行部署")
}
}
}
}
post {
always{
script{
println("流水线结束后,经常做的事情")
}
}
success{
script{
println("流水线成功后,要做的事情")
}
}
failure{
script{
println("流水线失败后,要做的事情")
}
}
aborted{
script{
println("流水线取消后,要做的事情")
}
}
}
}
我们可以跑一下这个pipeline,你会发现他跑了4个部分
最后我来总结一下,今天我们主要介绍了什么是pipeline,pipeline由几部分组成,它的结构是什么。如果你还有什么问题,或者建议,可以给我留言,或者关注我的公众号 小圆和他的朋友们。期待与你共同进步。