运维那点事 - jenkins 流水线

发布于: 2020 年 05 月 27 日
运维那点事 - jenkins流水线

承前



做为运维,逃不掉的工作之一就是Jenkins 。哪怕开发同学自己会搭也一定会等你来完成,不然像强了某人的责任田一样。






Jenkins 流水线





CI/CD



说起 CI/CD,大家自然会想起来 Jenkins ,其实这两个东西没啥直接联系,Jenkins 充其量是个持续集成工具而已。于是有人就说了,怎么会没关系,CI/CD 不就是持续集成和持续交付么? 定义没错,但你做到了么。所谓的持续集成并不是指把代码拿出来,打成jar包之类,那个就叫打包。所谓集成的概念有点类似代码合并,延伸出来的话就是通过构建大量不同级别的自动化测试,确认代码修改没有对应用造成。因为验证流程是很繁琐的,所以需要持续集成,不停的做验证操作,以保证代码开发的效率。而主流的玩法却是先集成起来,最多套个gerrit 增加点眼缘,然后就打成包发往不同环境了,等测试同学发现问题,自动回滚代码已经不太现实,多半覆盖修复了。基于以上原因,说大家都没有CI起来。至于CD,有些同学会理解成持续部署,毕竟两个词都是D开头的,但其实是交付,也就是由CI引出来的,通过持续交付自动将已验证的代码发布到存储库,使之随时有可以部署到生产的代码库。同样,第一步没有完成,第二步也没有可能完成。持续部署大家都完的挺溜的,这个功能其实是CD的延伸,只不过没了CICD以后,大家或是不开放生产自动部署,或是启用流程系统控制流转,也倒圆的过来。



流水线



CI/CD 因为是持续自动化的一系列操作,也被称为CI/CD管道。无独有偶,Jenkins 也有类似的东西 Pipeline,所以大家就玩的不亦乐乎,逼近都是管道流水线操作嘛,虽然没有灵魂。



Jenkins 的基础知识就是介绍了,挺简单的,一个Java 程序罢了。我们直接看Pipeline ,Pipeline 是一个套件,支持把持续交付流水线集成到 Jenkins里。而流水线的定义一般被写到一个文本文件中,Jenkinsfile,该文件“编制”了整个构建软件的过程。



流水线组成:



  • Pipeline 流水线,整个构建过程

  • Node 节点,是一个机器, Jenkins环境的一部分

  • Stage 阶段,一般是不同子集,构建、测试、发布

  • Step 步骤,单一任务,用的较少



流水线的写法有两种,声明式写法和脚本化写法。两种用的语言都是 Groovy的语法,不过表述方式上会有点差别,可以根据自己喜好选取。



#声明式
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
}
}
stage('Test') {
steps {
}
}
stage('Deploy') {
steps {
}
}
}
}



  • Pipeline块定义了整个流水线中完成的所有工作

  • agent:定义代理上执行流水线

  • stage('Build'):定义Build阶段,举例

  • steps:执行某阶段相关的步骤



#脚本式
Jenkinsfile (Scripted Pipeline)
node {
stage('Build') {
sh 'make'
}
stage('Test') {
}
stage('Deploy') {
}
}



脚本式会简化一些,甚至stage 部分也可以省略掉,却没有声明式那么层次清晰。






总结



基本内容就到这里了,起个头就行,具体的语法和最佳实践请参考官方文档,再描述下去也不过是把手册搬过来,还可能有遗漏,所以就不了。后面有机会 yann 会尝试介绍下生产里的部署,或者 Jenkins X 也是不错的方向,

l

用户头像

面向工资充电 2018.08.07 加入

系统运维专家

评论

发布
暂无评论
运维那点事 - jenkins流水线