Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

时间:2024-04-09 18:30:29

本篇继续介绍Pipeline的基础语法,这篇先看看指令。然后看看常见的几种参数的手工创建和自动化代码创建过程。

 

指令1:environment

该environment指令指定一系列键值对,这些对值将被定义为所有步骤的环境变量或阶段特定步骤,具体取决于environment指令位于Pipeline中的位置。

解释一下什么意思,environment{…}, 大括号里面写一些键值对,也就是定义一些变量并赋值,这些变量就是环境变量。环境变量的作用范围,取决你environment{…}所写的位置,你可以写在顶层环境变量,让所有的stage下的step共享这些变量,也可以单独定义在某一个stage下,只能供这个stage去调用变量,其他的stage不能共享这些变量。一般来说,我们基本上上定义全局环境变量,如果是局部环境变量,我们直接用def关键字声明就可以,没必要放environment{…}里面。

 

代码举例:

Pipeline {
    agent any
    environment {
        unit_test = true
    }
    stages {
        stage('Example') {
            steps {
                if(unit_test == true) {
                   // call run unit test methods
                }
            }
        }
    }
}

 

指令2:options

该options指令允许在Pipeline本身内配置Pipeline专用选项。Pipeline提供了许多这些选项,例如buildDiscarder,但它们也可能由插件提供,例如 timestamps。

这个options{…}不是一个必须的指令,我几乎没有用到过这个,如果要用,一个pipeline{…}内只运行出现一次options{…}, 下面看一个下这个retry的使用。

Pipeline {
    agent any
    options {
        retry(3)
    }
    stages {
        stage('Example') {
            steps {
                // call some method
            }
        }
    }
}

上面的整个pipeline{…}, 如果在jenkins上job执行失败,会继续执行,如果再遇到失败,继续执行一次,总共执行三次。这种任务场景,一般是在夜间执行,无人值守的时候。例如,如果要下班前,要提交一个jenkins job,跑一下测试,由于之前经验告诉我,跑这些测试很不稳定,我就可以通过上面代码,让pipeline代码失败的时候还可以再尝试运行两次,第二天来看结果。总体来说,这个指令不是必须要有的,所以不是必须要掌握学习好的。

上面是把options{…}放在顶层里,也可以放在具体的某一个stage下,意味这这个stage下所有代码,如果遇到失败,最多执行三次。

 

指令3:parameters

改parameters是参数的意思,parameters指令提供用户在触发Pipeline时应提供的参数列表。这些用户指定的参数的值通过该params对象可用于Pipeline步骤。

我们很多人听过参数化构建,也可能知道如何在一个jenkins job上,通过UI创建不同的参数,例如有字符串参数,布尔选择参数,下拉多选参数等。这些参数即可以通过UI点击创建,也可以通过pipeline代码去写出来。我们先来看看了解有那些具体参数类型,然后挑选几个,分别用UI和代码方式去实现创建这些参数。

 

字符串参数

就是定义一个字符串参数,用户可以在Jenkins UI上输入字符串,常见使用这个参数的场景有,用户名,收件人邮箱,文件网络路径,主机名称的或者url等

代码举例:

Pipeline {
    agent any   
    parameters {
        string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '')
    }
}

 

布尔值参数

就是定义一个布尔类型参数,用户可以在Jenkins UI上选择是还是否,选择是表示代码会执行这部分,如果选择否,会跳过这部分。一般需要使用布尔值的场景有,执行一些特定集成的脚本或则工作,或者事后清除环境,例如清楚Jenkins的workspace这样的动作。

代码举例:

Pipeline {
    agent any
    parameters {
        booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
    }
}

 

文本参数

文本(text)的参数就是支持写很多行的字符串,这个变量我好像没有使用过,例如想给发送一段欢迎的消息,你可以采用text的参数。

代码举例:

Pipeline {
    agent any
    parameters {
        text(name: 'Welcome_text', defaultValue: 'One\nTwo\nThree\n', description: '')
    }

}

上面的\n表示换行,上面写了三行的text。

 

选择参数

选择(choice)的参数就是支持用户从多个选择项中,选择一个值用来表示这个变量的值。工作中常用的场景,有选择服务器类型,选择版本号等。

代码举例:

Pipeline {
    agent any
    parameters {
        choice(name: 'ENV_TYPE', choices: ['test', 'dev', 'product'], description: 'test means test env,….')

    }
}

 

文件参数

文件(file)参数就是在Jenkins 参数化构建UI上提供一个文件路径的输入框,Jenkins会自动去你提供的网络路径去查找并下载。一般伴随着还有你需要在Pipleline代码中写解析文件。也有这样场景,这个构建job就是把一个war包部署到服务器上特定位置,你可以使用这个文件参数。

代码举例:

Pipeline {
    agent any
    parameters {
        name: 'FILE', description: 'Some file to upload')
    }

}

 

密码参数

密码(password)参数就是在Jenkins 参数化构建UI提供一个暗文密码输入框,例如,我需要在一些linux机器上做自动化操作,需要提供机器的用户名和密码,由于密码涉及安全问题,一般都采用暗文显示,这个时候你就不能用string类型参数,就需要使用password参数类型。

代码举例:

Pipeline {
    agent any
    parameters {
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password')

    }
}

 

下面我选择字符串,选择和布尔三个类型,分别用UI创建和代码创建的方式去实现Jenkins Job的参数化构建。

 

方式1,Jenkins UI手动创建

1 新建一个pipeline job,参考下面这图,注意勾选下面这项。

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

2.选择字符串参数,填入相关信息

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

3.重复步骤2,分别创建choice和booleam类型参数

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

 

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

点击保存和Apply按钮,然后打开左侧一个参数化构建的菜单:Build with Parameters

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

 

代码方式实现参数创建和赋值过程。

上面的字符串和布尔已经选择参数化都可以在pipeline代码中实现,并不需要手动去在Jenkins UI上一个一个创建。

先把上面job-配置界面,去掉参数化,点击保存。如果不会,你干脆新建一个pipeline job类型。点击这个job配置页面中的pipeline tab,选择从git项目上执行一个jenkinsfile文件。前提你把上面代码保存到你github的一个项目里。

pipeline{

    agent any
    parameters {
        string(name: 'userName', defaultValue: 'Anthony', description: 'please give a name')
        choice(name: 'version', choices: ['1.1', '1.2', '1.3'], description: 'select the version to test')
        booleanParam(name: 'is_boy', defaultValue: true, description: 'you is boy or not')
    }
    stages {
        stage('test') {
            steps{
                script {
                    sh "java -version"
                }
            }  
        }
    }
}

 

Jenkins高级篇之Pipeline-6-Declarative Pipeline指令:environment/options/parameters

点击保存,然后再去左侧,参数化构建菜单,点击看看效果。

保存之后,你会发现,菜单是Build now,而并不是Build with Parameters,这个是正常,你先点击Build now,先完成第一个构建,Jenkins第二个构建才会显示代码中的三个参数。刷新之后,就可以看到参数化构建这个菜单。