美文网首页
jenkins pipeline初见

jenkins pipeline初见

作者: 白敏鸢 | 来源:发表于2018-04-13 09:36 被阅读0次

    Pipeline支持两种语法:Declarative(在Pipeline 2.5中引入)和Scripted Pipeline

    语法:
    pipeline { /* insert Declarative Pipeline here */ }
    在{}只能包含Sections, Directives, Steps或赋值语句
    
    Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。
           注意,Stage是一个逻辑分组的概念,可以跨多个Node。
    Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
    Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。
    
    
    
    1.流程控制
      pipeline脚本同其它脚本语言一样,从上至下顺序执行,它的流程控制取决于Groovy表达式,如if/else条件语句,
    2.Steps
      pipeline最核心和基本的部分就是“step”,从根本上来说,
    steps作为Declarative pipeline和Scripted pipeline语法的最基本的语句构建块来告诉jenkins应该执行什么操作
    3 Parallel(并行)
    Declarative Pipeline近期新增了对并行嵌套stage的支持,对耗时长,
    相互不存在依赖的stage可以使用此方式提升运行效率。
    
    agent部分指定整个Pipeline或特定阶段将在Jenkins的执行环境
    
         any
        在任何可用的agent 上执行Pipeline或stage。例如:agent any
      none
        当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。
      label
        使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage。例如:agent { label 'my-defined-label' }
      node
        agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。
      docker
        定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。 docker还可以接受一个args,直接传递给docker run调用。例如:agent { docker 'maven:3-alpine' }或
    
    
    docker
    agent {
        docker {
            image 'maven:3-alpine'
            label 'my-defined-label'
            args  '-v /tmp:/tmp'
        }
    }
    
    
    post:定义Pipeline或stage运行结束时的操作。
          这些块允许在Pipeline或stage运行结束时执行步骤,具体取决于Pipeline的状态。
    
      always
        运行,无论Pipeline运行的完成状态如何。
      changed
        只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
      failure
        仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
      success
        仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
      unstable
        只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。
      aborted
        只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示
    
    pipeline {
        agent any
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
        post {
            always {
                echo 'I will always say Hello again!'
            }
        }
    }
    
    stages:
    
    包含一个或多个stage的序列,Pipeline的大部分工作在此执行。
    建议stages至少包含至少一个stage指令,用于连接各个交付过程,如构建,测试和部署等。
    
    
    steps:
    steps包含一个或多个在stage块中执行的step序列。
    pipeline {
        agent any
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    
    environment:
    environment指令指定一系列键值对,这些键值对将被定义为所有step或stage-specific step的环境变量,
    具体取决于environment指令在Pipeline中的位置。
    
    pipeline {
        agent any
        environment {
            CC = 'clang'
        }
        stages {
            stage('Example') {
                environment {
                    AN_ACCESS_KEY = credentials('my-prefined-secret-text')
                }
                steps {
                    sh 'printenv'
                }
            }
        }
    }
    
    
    options:
    options指令允许在Pipeline本身内配置Pipeline专用选项
    
    uildDiscarder
        pipeline保持构建的最大个数。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
      disableConcurrentBuilds
        不允许并行执行Pipeline,可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
      skipDefaultCheckout
        默认跳过来自源代码控制的代码。例如:options { skipDefaultCheckout() }
      skipStagesAfterUnstable
        一旦构建状态进入了“Unstable”状态,就跳过此stage。例如:options { skipStagesAfterUnstable() }
      timeout
        设置Pipeline运行的超时时间。例如:options { timeout(time: 1, unit: 'HOURS') }
      retry
        失败后,重试整个Pipeline的次数。例如:options { retry(3) }
      timestamps
        预定义由Pipeline生成的所有控制台输出时间。例如:options { timestamps() 
    
    pipeline {
        agent any
        options {
            timeout(time: 1, unit: 'HOURS')
        }
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    
    parameters
    parameters指令提供用户在触发Pipeline时的参数列表。这些参数值通过该params对象可用于Pipeline步骤
    pipeline {
        agent any
        parameters {
            string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
        }
        stages {
            stage('Example') {
                steps {
                    echo "Hello ${params.PERSON}"
                }
            }
        }
    }
    
    triggers:triggers指令定义了Pipeline自动化触发的方式。对
    cron
      接受一个cron风格的字符串来定义Pipeline触发的常规间隔,例如: triggers { cron('H 4/* 0 0 1-5') }
    pollSCM
      接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }
    
    pipeline {
        agent any
        triggers {
            cron('H 4/* 0 0 1-5')
        }
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    
    tools: 通过tools可自动安装工具,并放置环境变量到PATH
    
    pipeline {
        agent any
        tools {
            //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
            maven 'apache-maven-3.0.1'
        }
        stages {
            stage('Example') {
                steps {
                    sh 'mvn --version'
                }
            }
        }
    }
    
    when: when指令允许Pipeline根据给定的条件确定是否执行该阶段。
       branch
        当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。
      environment
        当指定的环境变量设置为给定值时执行,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
      expression
        当指定的Groovy表达式求值为true时执行,例如: when { expression { return params.DEBUG_BUILD } }
      not
        当嵌套条件为false时执行。必须包含一个条件。例如:when { not { branch 'master' } }
      allOf
        当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
      anyOf
        当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }
     
    
    
    pipeline {
        agent any
        stages {
            stage('Example Build') {
                steps {
                    echo 'Hello World'
                }
            }
            stage('Example Deploy') {
                when {
                    allOf {
                        branch 'production'
                        environment name: 'DEPLOY_TO', value: 'production'
                    }
                }
                steps {
                    echo 'Deploying'
                }
            }
        }
    }
      
    

    相关文章

      网友评论

          本文标题:jenkins pipeline初见

          本文链接:https://www.haomeiwen.com/subject/aswqkftx.html