四时宝库

程序员的知识宝库

Jenkins声明式流水线和脚本式流水线

Jenkins作为热门的自动化构建工具,一直都在发展。

几年前推出了流水线(Pipeline)

主导思想就是pipeline as code,用代码来编写自动化流水线。

采用groovy作为语言。


node {
    stage('stage1') {
        if (env.BRANCH_NAME == 'master') {
            echo 'master branch'
        } else {
            echo 'not master branch'
        }
    }
}


就像一般的脚本语言一样,groovy带来的自由度,使得一切都可能实现。

同时自由度带来的问题是,pipeline脚本的随意性。简单的脚本几百行,大项目就算写个几千行都没有问题。而且脚本的自由,带来结构的自由,使得脚本难以维护。

新的pipeline脚本,声明式,定义了一堆语句,为的就是能够控制pipeline脚本编写的自由度。让用户真正去思考为什么要写pipeline,哪些需要写入pipeline。

下面是一个声明式的pipeline脚本。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Deploy') {
            when {
                branch 'production'
            }
            steps {
                echo 'Deploying'
            }
        }
    }
}


同时提供一个特殊的step,script step,在这个模块里面可以任意的写脚本来完成任务,保持了原有的自由度。


如何区分两种写法呢,其实很简单。

1. 脚本式的,以node语句开头,

2. 而声明式的以pipeline语句开头。


Jenkins的官方文档并没有直说推荐使用声明式的脚本。但是还是很明显能够看出如果编写新的pipeline,我们应该选择声明式的。

1. 声明式是新推出的,说明Jenkins设计者认为原来的脚本式会引发一些问题,应该就是我说的,过于自由,结构容易混乱。

2. 官方文档介绍声明式的篇幅是脚本式的10倍之多。

3. 声明式介绍在文档的头部,也就是你如果不把文档读到底,可能都不知道有脚本式一说。


如果没有历史遗留代码,建议上声明式的pipeline脚本,如果有遗留代码,也建议在修改或者修复问题的时候,往声明式进行转换。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接