三叶草 发表于 2021-12-15 12:50:32

流水线pipeline招式之声明式(中篇)


流水线pipeline招式之声明式(前篇)
大家好,我们继续上一篇的话题,声明式流水线。如果你还没有,可以点击上方的链接。今天我们继续来说指令。下面我们开始
parameters参数
为流水线运行时设置项目相关的参数,就不用在UI界面上定义了,比较方便。另外要注意的是,这个指令只允许放在pipeline下面,不能放在stage中。
string 字符串类型的参数, 例如:
{ string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }可以接受三个参数,name、defaultValue、description:

[*]name:参数名
[*]defaultValue:默认值
[*]description:参数的描述信息
下面我们来看一个例子:
any
parameters {
    string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
    stage('Example') {
      steps {
            echo "Hello ${params.PERSON}"
      }
    }
}这里要注意一个问题。如果是通过jenkins配置来增加参数的化,那么配置完毕就可以看到


但是如果用jenkinsfile里面配置,必须构建一遍以后才能显示
那么,除了string以外,还有什么参数呢,下面我们来一起看一下。
booleanParam 布尔参数, 例如:
{
    booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
}text 多行文本类型,如果换行可以使用\n
{
    text(name: 'DEBUG_BUILD', defaultValue: 'One\nTwo\nThree\n', description: '')
}choice 选择参数类型,使用\n来分隔多个选项
{
    choice(name: 'DEBUG_BUILD', defaultValue: 'Dev\nTest\nProd\n', description: '')
}password类型
{
    password(name: 'DEBUG_BUILD', defaultValue: 'SECRET', description: '')
}当然我们也可以在parameters中使用多个参数类型比如:
{
    booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
    choice(name: 'DEBUG_BUILD', defaultValue: 'Dev\nTest\nProd\n',description: '')
    text(name: 'DEBUG_BUILD', defaultValue: 'One\nTwo\nThree\n',description: '')
}trigger触发器
trigger触发器,定义一个时间,时间到了就会触发pipeline,在不考虑插件的情况下,一般有三种方式,cron,pollSCM,upstream。
cron为定时执行,也就是,我们可以定一个时间,比如凌晨,自动更新一般项目,把项目代码更新为最新。他的写法也和我们平时配置Linux的定时任务相似
//cron 计划任务定期执行构建。
triggers { cron('H */4 * * 1-5') }不过你也发现,还是有那么亿点点不一样,这个H又是什么意思。比如当半夜0点执行的时候(0 0 <em> </em> *) 这样会产生负载不均衡。H代表hash,就来解决这个问题的,如果我们配置成(H 0 <em> </em> **),这样代表0点0分,到0点59分任意一个时间点执行。所以我们可以下成下面的样子。
any
triggers {
    cron('H */4 * * 1-5')
}
stages {
    stage('Example') {
      steps {
            echo 'Hello World'
      }
    }
}pollSCM为轮询代码仓库,也就是,指定时间轮询代码库,如果有变化就执行。这种情况其实用的不算太多。因为可以通过代码库来通知jenkins,比如GitLab通过钩子,在代码有变更的时候通知Jenkins来进行代码发布。关于GitLab来触发Jenkins的内容,会在后面集成其他服务的时候详细说明。
//pollSCM 与cron定义类似,但是由jenkins定期检测源码变化。
triggers { pollSCM('H */4 * * 1-5') }upstream是由上游任务来触发
当A任务执行成功或者失败或者中止等情况的时候触发另外一个,或者另外多个任务
// job1和job2都是任务名,当任务成功是,触发构建job1和job2
triggers {
    upstream(upstreamProjects: 'job1, job2', threshold: hudson.model.Result.SUCCESS)
}hudson.model.Result.SUCCESS是一个枚举值,它表示A任务什么状态触发其他任务。这个状态处理SUCCESS以外还有:

[*]ABORTED:任务被手动中止
[*]FAILURE:构建失败
[*]UNSTABLE:存在一些错误,但是构建没有失败
[*]NOT_BUILT:在多阶段构建时,前面阶段的问题导致后面阶段无法执行
注意,这里和parameters参数有点类似,需要手动构建一次以后,才会触发
tool构建工具
构建工具maven、ant、gradle,获取通过自动安装或手动放置工具的环境变量。支持maven/jdk/gradle。工具的名称必须在系统设置->全局工具配置中定义。
any
tools {
    maven 'apache-maven-3.0.1'
}
stages {
    stage('Example') {
      steps {
            sh 'mvn --version'
      }
    }
}举例 比如说,我在全局工具中配置了git

如果我想在jenkinsfile中使用这个git
("Build"){
            steps{
                timeout(time:5, unit: 'MINUTES'){
                  script{
                        println("运行构建")
                        gitHome = tool "git"
                        println(gitHome)
                  }
                }
            }
      }输出

我们去取到变量就可以做很多操作,比如
("Build"){
            steps{
                timeout(time:5, unit: 'MINUTES'){
                  script{
                        println("运行构建")
                        gitHome = tool "git"
                        sh "${gitHome} checkout mastsr"
                  }
                }
            }
      }input交互输入
input用户在执行各个阶段的时候,由人工确认是否继续进行。他的使用场景是,可以实现一个简单的审批过程,比如某个阶段需要某个人去点击确认后才可以部署。或者测试同事需要一个手动的测试,测试完成后继续部署。
any
stages {
    stage('Example') {
      input {
            message "Should we continue?"
            ok "Yes, we should."
            submitter "alice,bob"
            parameters {
                string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
            }
      }
      steps {
            echo "Hello, ${PERSON}, nice to meet you."
      }
    }
}input 可以用流水线开发工具生成



生成流水线语法,赋值到jenkinsfile中

运行pipline,这里就有选项了

参数解释:

[*]message 呈现给用户的提示信息。
[*]id 可选,默认为stage名称。
[*]ok 默认表单上的ok文本。
[*]submitter 可选的,以逗号分隔的用户列表或允许提交的外部组名。默认允许任何用户。
[*]submitterParameter 环境变量的可选名称。如果存在,用submitter 名称设置。
[*]parameters 提示提交者提供的一个可选的参数列表。
下面我来总结一下,今天介绍了parameters、trigger、tool和input指令,需要注意的是他们各自运行位置,parameters和trigger可以运行在pipeline块中,tool和input可以放在stage步骤中。parameter如果在Jenkinsfile中定义,需要进行一次构建才能正常显示在流水线构建的页面,但是如果我们配置一个自由风格的流水线,那么在配置的时候添加变量是可以直接看到的。如果你还有什么问题,或者建议,可以给我留言。期待与你共同进步。

            </div>
      
      <div id="asideoffset"></div>

https://blog.51cto.com/u_13035331/4801893
页: [1]
查看完整版本: 流水线pipeline招式之声明式(中篇)