评论

收藏

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

服务系统 服务系统 发布于:2021-12-15 12:50 | 阅读数:336 | 评论:0

DSC0000.png
流水线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配置来增加参数的化,那么配置完毕就可以看到
DSC0001.png

DSC0002.png

但是如果用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
DSC0003.png

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

我们去取到变量就可以做很多操作,比如
("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 可以用流水线开发工具生成
DSC0005.png
DSC0006.png

DSC0007.png

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

运行pipline,这里就有选项了
DSC0009.png

参数解释:

  • 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>

关注下面的标签,发现更多相似文章