流水线基础-Pipeline

时间:2021-03-01 22:54:11   收藏:0   阅读:101

1. 认识Pipleine

1.1 Pipeline是什么?

1.2 Jenkinsfile

1.3 为什么使用Pipeline?

本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。 通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如:

构建一个可扩展是Jenkins的核心价值,流水线可以通过ShareLibrary的方式来扩展。 下面是一个CD的场景实例 

技术分享图片

2.Pipeline概念

pipeline演示

来我们一起看下这里的配置,看下Jenkinsfile的组成及每个部分的功能含义。

 

 

 

 

参考文档:http://www.idevops.site/jenkins/pipelinesyntax/chapter01/

 

声明式流水线

 

声明式Pipleine是官方推荐的语法,声明式语法更加简洁。所有的声明式Pipeline都必须包含一个 pipeline块中,比如:

 

pipeline {
    //run
}

 

在声明式Pipeline中的基本语句和表达式遵循Groovy的语法。但是有以下例外:

 

 

agent代理

 

agent指定了流水线的执行节点。

 

agent { node { label ‘labelname‘ }}

aget { label ‘ labelname ‘}

 

参数:

 

 

post运行后处理

 

当流水线完成后根据完成的状态做一些任务。例如:构建失败后邮件通知

 

post { 
    always { 
        echo ‘I will always say Hello again!‘
    }

    failure{
        email : xxxx@dxx.com
    }
}

 

常用的状态:

 

 

stages阶段

 

stages是流水线的整个运行阶段,包含一个或多个 stage , 建议 stages 至少包含一个 stage

 

stages { 
    stage(‘Example‘) {
        steps {
            echo ‘Hello World‘
        }
    }
}

 

environment环境变量

 

定义流水线环境变量,可以定义在全局变量或者步骤中的局部变量。这取决于 environment 指令在流水线内的位置。

 

agent any

//全局变量
environment { 
    activeEnv = ‘dev‘
}
stages {
    stage(‘Example‘) {

        //局部变量
        environment { 
            AN_ACCESS_KEY = credentials(‘my-prefined-secret-text‘) 
        }
        steps {
            sh ‘printenv‘
        }
    }
}

 

options运行选项

 

定义流水线运行时的配置选项,流水线提供了许多选项, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。

 

agent any
options {
    timeout(time: 1, unit: ‘HOURS‘) 
}
stages {
    stage(‘Example‘) {
        steps {
            echo ‘Hello World‘
        }
    }
}

 

其他部分参数:

 

 

parameters参数

 

为流水线运行时设置项目相关的参数,就不用在UI界面上定义了,比较方便。

 

//string 字符串类型的参数, 例如:
parameters { string(name: ‘DEPLOY_ENV‘, defaultValue: ‘staging‘, description: ‘‘) }

//booleanParam 布尔参数, 例如:
parameters { booleanParam(name: ‘DEBUG_BUILD‘, defaultValue: true, description: ‘‘) }

 

agent any
parameters {
    string(name: ‘PERSON‘, defaultValue: ‘Mr Jenkins‘, description: ‘Who should I say hello to?‘)
}
stages {
    stage(‘Example‘) {
        steps {
            echo "Hello ${params.PERSON}"
        }
    }
}

 

trigger触发器

 

构建触发器

 

//cron 计划任务定期执行构建。
triggers { cron(‘H */4 * * 1-5‘) }


//pollSCM 与cron定义类似,但是由jenkins定期检测源码变化。
triggers { pollSCM(‘H */4 * * 1-5‘) }




agent any
triggers {
    cron(‘H */4 * * 1-5‘)
}
stages {
    stage(‘Example‘) {
        steps {
            echo ‘Hello World‘
        }
    }
}

 

tool构建工具

 

构建工具maven、ant、gradle,获取通过自动安装或手动放置工具的环境变量。支持maven/jdk/gradle。工具的名称必须在系统设置->全局工具配置中定义。

 

agent any
tools {
    maven ‘apache-maven-3.0.1‘ 
}
stages {
    stage(‘Example‘) {
        steps {
            sh ‘mvn --version‘
        }
    }
}

 

input交互输入

 

input用户在执行各个阶段的时候,由人工确认是否继续进行。

 

agent 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."
        }
    }
}

 

参数解释:

 

 

when条件判断

 

when 指令允许流水线根据给定的条件决定是否应该执行阶段。 when 指令必须包含至少一个条件。

 

//branch: 当正在构建的分支与模式给定的分支匹配时,执行这个阶段,这只适用于多分支流水线例如:
when { branch ‘master‘ }


//environment: 当指定的环境变量是给定的值时,执行这个步骤,例如:
when { environment name: ‘DEPLOY_TO‘, value: ‘production‘ }

//expression 当指定的Groovy表达式评估为true时,执行这个阶段, 例如:
when { expression { return params.DEBUG_BUILD } }

//not 当嵌套条件是错误时,执行这个阶段,必须包含一个条件,例如:
when { not { branch ‘master‘ } }

//allOf 当所有的嵌套条件都正确时,执行这个阶段,必须包含至少一个条件,例如:
when { allOf { branch ‘master‘; environment name: ‘DEPLOY_TO‘, value: ‘production‘ } }

//anyOf 当至少有一个嵌套条件为真时,执行这个阶段,必须包含至少一个条件,例如:
when { anyOf { branch ‘master‘; branch ‘staging‘ } }


stage(‘Example Deploy‘) {
    when {
        branch ‘production‘
        environment name: ‘DEPLOY_TO‘, value: ‘production‘
    }
    steps {
        echo ‘Deploying‘
    }
}

 

parallel并行

 

声明式流水线的阶段可以在他们内部声明多隔嵌套阶段, 它们将并行执行。 注意,一个阶段必须只有一个 steps 或 parallel的阶段。 嵌套阶段本身不能包含 进一步的 parallel 阶段, 但是其他的阶段的行为与任何其他 stageparallel 的阶段不能包含 agent 或 tools阶段, 因为他们没有相关 steps。

 

 stage(‘Parallel Stage‘) {
    when {
        branch ‘master‘
    }
    failFast true
    parallel {
        stage(‘Branch A‘) {
            agent {
                label "for-branch-a"
            }
            steps {
                echo "On Branch A"
            }
        }
        stage(‘Branch B‘) {
            agent {
                label "for-branch-b"
            }
            steps {
                echo "On Branch B"
            }
        }
    }
}

 

failFast true 当其中一个进程失败时,强制所有的 parallel 阶段都被终止。

 

script脚本标签

 

可以通过此标签嵌入脚本式语法。

 

stage("Build"){
    steps{
        script{
            println("运行构建")
        }
    }
}

 

原文:https://www.cnblogs.com/lxc123/p/14466307.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!