Jenkins基础

Pipeline

Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化

基本概念

node

关键字node就是用来区分,Jenkins环境中不同的节点环境。例如一个Jenkins环境包括master节点,也就是主节点,还包括N多个从节点,这些从节点在添加到主节点的向导页面中有一个参数,好像是label,就是给这个从节点取一个名称。在Pipeline代码中可以通过node这个关键字告诉Jenkins去用哪一台节点机器去执行代码。

stage

关键字stage,就是一段代码块,一般个stage包含一个业务场景的自动化,例如build是一个stage, test是第二个stage,deploy是第三个stage。通过stage隔离,让Pipeline代码读写非常直观。到后面你还会学习stages这个关键字,一个stages包含多个stage。

step

关键字step就是一个简单步骤,一般就是几行代码或者调用外部一个模块类的具体功能。这里step是写在stage的大括号里的。

agent

agent部分主要作用就是告诉Jenkins,选择那台节点机器去执行Pipeline代码

各种可选参数的意思

  1. any:在任何可用的代理上执行Pipeline或stage。
  2. none:当在pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个stage部分将需要包含其自己的agent部分。
  3. label:使用提供的标签在Jenkins环境中指定的代理机器上执行Pipeline或stage内执行。
pipeline {
    agent {
       label ‘具体一个节点label名称’
    }
}

post

post部分定义将在Pipeline运行或阶段结束时运行的操作。一些条件后 的块的内支持post:部分 always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline运行或阶段结束时执行步骤,具体取决于Pipeline的状态。简单来说,post可以放在顶层,也就是和agent{…}同级,也可以放在stage里面

基本的代码格式

pipeline {
    agent any
        stages {
            stage (‘Test’) {
        }
    }
    post {
         always { // 总是执行
            script {
                //  代码
            }
       }
      failure { // 失败
            script {
                //  代码
            }
       }
      success { // 成功
            script {
                //  代码
            }
       }
      changed { // 与上一次的结果不一致
            script {
                //  代码
            }
       }
   }
}

environment

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

input

该input指令允许在一个stage{…}显示提示输入等待。在inpt{…}写一些条件,然后用户触发构建这个job,但是这个时候没有接收到有效的input, job会一直在等待中,你可以在例如job #1的output console中,点击这个input条件,提供input,构建才会继续。

各种可选参数

  1. message:这个是必须的,这个message会在用户提交构建的页面显示,提示用户提交相关的input条件。
  2. id:可选,可以作为这个input的标记符,默认的标记符是这个stage的名称。
  3. ok:可选, 主要是在ok按钮上显示一些文本,在input表单里。
  4. submitter:可选,里面可以写多个用户名称或者组名称,用逗号隔开。意思就是,只有这写名称的对应用户登陆jenkins,才能提交这个input动作,如果不写,默认是任何人都可以提交input。
  5. parameters:这是一个可选, 和我们前面学的parameters没有区别,就是定义一些参数的地方。
pipeline {
    agent any
    stages {
        stage('Example') {
            input {
                message "Should we continue?"
                ok "Yes, we should."
                submitter "admin"
                parameters {
                    string(name: 'PERSON', defaultValue: 'Mr Anthony', description: 'Who should I say hello to?')
                }
            }
            steps {
                echo "Hello, ${PERSON}, nice to meet you."
            }
        }
    }

参考文章

Jenkins高级篇之Pipeline代码自动化

你可能感兴趣的:(Jenkins基础)