Jenkins基础:Jenkinsfile使用实例:4:六种参数类型

在上一篇文章中介绍了在Jenkinsfile中通过parameters中的choice(下拉框)类型获取输入参数的方法,这篇文章将会继续介绍Jenkinsfile的parameters所支持的其他物种类型的使用方式。

parameter{}

在上篇文章的示例中我们看到了parameter{}的使用方式,用户通过特定的方式来指定参数的数值,并将其在流水线执行之前传入其中,满足了流水线中根据用户需求来指定参数的需求。

  • 使用限制:必须写在pipeline{}块中,只能存在一处parameter{}
  • 可选vs必选:可选

参数类型

Jenkinsfile目前支持如下六种类型的参数,具体说明如下所示:

参数类型 参数说明
string 字符串类型参数
text 文本类型参数,与字符串的区别在于可以包含多行信息,用于传入较多信息输入
booleanParam 布尔类型参数
choice 类似下拉框或者支持多值的单选参数
file 指定构建过程中所需要的文件
password 考虑到安全的因素,需要通过参数方式传递的密码类型

环境准备

本文使用Easypack的LTS Jenkins 2.167.1版,环境准备请参看

  • https://liumiaocn.blog.csdn.net/article/details/92764938

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式生成示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:83d748ee92512c4dccd589aaa5c55a9a
liumiaocn:jenkins liumiao$

创建Job

使用如下代码示例创建Job

liumiaocn:jenkins liumiao$ ls demo/pipeline/paramsall/config.xml
demo/pipeline/paramsall/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/paramsall/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="[email protected]">
  <actions>
    <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="[email protected]"/>
  </actions>
  <description>Pipeline Job Sample</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.plugins.jira.JiraProjectProperty plugin="[email protected]"/>
    <com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="[email protected]">
      <gitLabConnection></gitLabConnection>
    </com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty>
  </properties>
  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="[email protected]">
  <script>pipeline {
  agent any

  parameters {
    choice(
      description: '你需要选择哪个模块进行构建 ?',
      name: 'modulename',
      choices: ['Module1', 'Module2', 'Module3']
    )
    
    string(
        description: '你需要在哪台机器上进行部署 ?',
        name: 'deploy_hostname', 
        defaultValue: 'host131', 
    )

    text(
        name: 'release_note', 
        defaultValue: 'Release Note 信息如下所示: \n \
Bug-Fixed: \n \
Feature-Added: ', 
        description: 'Release Note的详细信息是什么 ?'
    )

    booleanParam(
        name: 'test_skip_flag', 
        defaultValue: true, 
        description: '你需要在部署之前执行自动化测试么 ?'
    )


    password(
        name: 'deploy_password', 
        defaultValue: 'liumiaocn', 
        description: '部署机器连接时需要用到的密码信息是什么 '
    )

    file(
        name: "deploy_property_file", 
        description: "你需要输入的部署环境的设定文件是什么 ?"
    )
  }

  stages {
        stage('Build') { 
            steps { 
                echo "Build stage: 选中的构建Module为 : ${params.modulename} ..." 
            }
        }
        stage('Test'){
            steps {
                echo "Test stage: 是否执行自动化测试: ${params.test_skip_flag} ..."
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploy stage: 部署机器的名称 : ${params.deploy_hostname} ..." 
                echo "Deploy stage: 部署连接的密码 : ${params.deploy_password} ..." 
                echo "Deploy stage: Release Note的信息为 : ${params.release_note} ..." 
            }
        }
    }
  }</script>
  <sandbox>false</sandbox>
  </definition>
  <triggers/>
  <disabled>false</disabled>
</flow-definition>
liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml"  --data-binary  "@demo/pipeline/paramsall/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_paramsall
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$ 

Jenkinsfile说明

本文示例所使用的Jenkinsfile信息如下所示,内容非常简单易读,简单说明如下:

  • pipeline是结构,在其中可以指定agent和stages等相关信息
  • agent用于指定执行job的节点,any为不做限制
  • stages用与设定具体的stage
  • stage为具体的节点,比如本文示例中模拟实际的 Build(构建)、测试(Test)、部署(Deploy)的过程。
  • parameters块用于定义输入参数名称、输入参数的提示信息以及输入参数的选择初始化内容列表

示例参数使用说明

代码行 说明
description: ‘Which Module do you prefer to choose?’, 用户选择输入时的提示信息
name: ‘modulename’ 参数名称为modulename
choices: [‘Module1’, ‘Module2’, ‘Module3’] 用户通过选择下拉框或者单选框(BlueOcean)来选择modulename参数的设定值
引用方式 通过 ${params.modulename} 的方式对此参数进行引用
pipeline {
  agent any

  parameters {
    choice(
      description: '你需要选择哪个模块进行构建 ?',
      name: 'modulename',
      choices: ['Module1', 'Module2', 'Module3']
    )
    
    string(
        description: '你需要在哪台机器上进行部署 ?',
        name: 'deploy_hostname', 
        defaultValue: 'host131', 
    )

    text(
        name: 'release_note', 
        defaultValue: 'Release Note 信息如下所示: \n \
Bug-Fixed: \n \
Feature-Added: ', 
        description: 'Release Note的详细信息是什么 ?'
    )

    booleanParam(
        name: 'test_skip_flag', 
        defaultValue: true, 
        description: '你需要在部署之前执行自动化测试么 ?'
    )


    password(
        name: 'deploy_password', 
        defaultValue: 'liumiaocn', 
        description: '部署机器连接时需要用到的密码信息是什么 '
    )

    file(
        name: "deploy_property_file", 
        description: "你需要输入的部署环境的设定文件是什么 ?"
    )
  }

  stages {
        stage('Build') { 
            steps { 
                echo "Build stage: 选中的构建Module为 : ${params.modulename} ..." 
            }
        }
        stage('Test'){
            steps {
                echo "Test stage: 是否执行自动化测试: ${params.test_skip_flag} ..."
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploy stage: 部署机器的名称 : ${params.deploy_hostname} ..." 
                echo "Deploy stage: 部署连接的密码 : ${params.deploy_password} ..." 
                echo "Deploy stage: Release Note的信息为 : ${params.release_note} ..." 
            }
        }
    }
  }

执行Job

本文示例的参数使用方法分为两步,首次执行会生成Jenkins的参数选择块的内容,再次执行的时候,输入参数的选择则会生效,执行效果如下所示
Jenkins基础:Jenkinsfile使用实例:4:六种参数类型_第1张图片
执行之后使用如下命令可以确认相关的执行日志信息(此例为第二次执行结果信息)

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_paramsall/2/consoleText
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/pipeline_job_paramsall
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Build stage: 选中的构建Module为 : Module1 ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
Test stage: 是否执行自动化测试: true ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] echo
Deploy stage: 部署机器的名称 : host131 ...
[Pipeline] echo
Deploy stage: 部署连接的密码 : liumiaocn ...
[Pipeline] echo
Deploy stage: Release Note的信息为 : Release Note 信息如下所示: 
 Bug-Fixed: Bug1011
 Feature-Added: Feature2011 ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
liumiaocn:jenkins liumiao$ 

也可以使用BlueOcean可以进行结果的确认
Jenkins基础:Jenkinsfile使用实例:4:六种参数类型_第2张图片

注意事项

需要注意的是BlueOcean在用户输入方面有一定的限制,如果期待从BlueOcean执行此Job,会得到如下的提示
Jenkins基础:Jenkinsfile使用实例:4:六种参数类型_第3张图片
对应的方式则为通过点击 Resolve Input的链接跳回到经典界面使用上述的方式执行,此处的问题早在2017年就被人提出,可以参看一个名为Blue Ocean doesnt render Active Choices parameters的Issue,链接如下所示:

  • https://issues.jenkins-ci.org/browse/JENKINS-41709
    截止到2019年6月19日,此Issue的状态仍然是Open

总结

在实际Jenkins的使用中BlueOcean应用的越来越广泛,但是如何和传统方式下的功能进行融合,比如此处的参数类型的支持,是改变旧有做法还是增加支持,开源会以它自己的节奏推进,但是实际项目的使用则无法达到这样的泰然处之,实际使用的时候还是需要多加考虑。

你可能感兴趣的:(#,Jenkins,#,持续构建)