Jenkins 流水线说明

.Jenkins 流水线
.CI/CD
.流水线
1.承前
作为运维,逃不掉的工作之一就是Jenkins 。哪怕开发同学自己会搭也一定会等你来完成,不然像抢了某人的责任田一样。
2. Jenkins 流水线
Jenkins 流水线说明_第1张图片
3.CI/CD
说起 CI/CD,大家自然会想起来 Jenkins ,其实这两个东西没啥直接联系,Jenkins 充其量是个持续集成工具而已。
于是有人就说了,怎么会没关系,CI/CD 不就是持续集成和持续交付么。定义没错,但你做到了么?所谓的持续集成并不是指把代码拿出来,打成jar包之类,那个就叫打包。
所谓集成的概念有点类似代码合并,延伸出来的话就是通过构建大量不同级别的自动化测试,确认代码修改没有对应用造成。
因为验证流程是很繁琐的,所以需要持续集成,不停的做验证操作,以保证代码开发的效率。
而主流的玩法却是先集成起来,最多套个gerrit 增加点眼缘,然后就打成包发往不同环境了,等测试同学发现问题,自动回滚代码已经不太现实,多半覆盖修复了。
基于以上原因,说大家都没有CI起来。至于CD,有些同学会理解成持续部署,毕竟两个词都是D开头的,但其实是交付,也就是由CI引出来的,通过持续交付自动将已验证的代码发布到存储库,使之随时有可以部署到生产的代码库。
同样,第一步没有完成,第二步也没有可能完成。持续部署大家都玩儿的挺溜的,这个功能其实是CD的延伸,只不过没了CICD以后,大家或是不开放生产自动部署,或是启用流程系统控制流转,也倒圆的过来。
4.流水线
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 标记也可以省略掉,没有声明式那么层次清晰。
5. 变量
1)sh命令执行时使用${var}获取的是groovy变量,如果执行命令过程中生成了shell变量,调用时需要"$",添加反斜杠.
2)通常情况下:sh 中都可以引用groovy的变量,即加env.或者不加都可获取
6.总结
基本内容就到这里,起个头就行了,具体的语法和最佳实践请参考官方文档https://www.jenkins.io/doc/book/pipeline/,再描述下去也不过是把手册搬过来,还可能有遗漏,所以就不了。后面有机会 yann 会尝试介绍下生产里的部署,或者 Jenkins X 也是不错的方向,敬请期待。

你可能感兴趣的:(jenkins,CI/CD)