【云原生】devops之jenkins中pipeline语法(1)

时间:2022-10-09 12:57:27

前言:

        pipeline语法分类一般来说,有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。

【云原生】devops之jenkins中pipeline语法(1)

一、环境配置


(1)agent:

       运行代理,指当前的逻辑程序需要什么环境才能运行。可以放在顶层pipeline块和每个stage块中。

  • any:当前逻辑程序可以在任何环境运行
  • none:不配置任何环境运行,在块的顶层应用时,pipeline不会为整个 Pipeline 运行分配全局代理,并且每个stage部分都需要包含自己的agent部分。
  • label:在 Jenkins 环境中使用提供的标签的可用代理上执行流水线或阶段。
例如:
agent { label 'my-defined-label' }

也可以使用标签条件。
例如:

agent { label 'my-label1 && my-label2' }

或

agent { label 'my-label1 || my-label2' }
  • node:agent { node { label 'labelName' } }行为与 相同 agent { label 'labelName' },但node允许附加选项(例如customWorkspace
  • docker:可以配置一个docker容器来运行作为其运行环境。
agent {
    docker { image 'maven:3.8.1-adoptopenjdk-11'}
}

【云原生】devops之jenkins中pipeline语法(1)

  • dockerfile:使用dockerfile文件来启动特定docker容器所创建的环境来运行。
  • kubernetes:在 Kubernetes 集群上部署的 pod 内执行管道或阶段。

(2)environment

        指定了一系列键值对。这些环境变量会在所有步骤中生效/特定步骤中生效,取决于你在哪里设置。

pipeline {
    agent any
    environment {
        CC = 'suncat'

    }
    stages {
        stage('SuncatExample') {
            environment {
                AN_ACCESS_KEY = credentials('my-predefined-secret-text')
            }
            steps {
                sh 'printenv'
            }
        }
    }
}

        ①第一个environment*块中使用的指令pipeline将应用于pipeline中的所有步骤。(CC = 'suncat'会在该pipeline所有位置均可用

        ②第二个environment名为“SuncatExample”的stage只会将给定的环境变量应用于stage.AN_ACCESS_KEY = credentials('my-predefined-secret-text') 仅在SuncatExample阶段中可用

        ③credentials(),可用于通过 Jenkins 环境中的标识符访问预定义的凭据。

(3)options

        该options指令允许从流水线本身配置流水线特定的选项。简单来说就是配置该流水线的一些运行参数。

pipeline全局参数:

  • buildDiscarder为该pipeline最近运行保留日志和控制台输出的数量。
  • 例如:
    options { 
        buildDiscarder(logRotator(numToKeepStr: '1')) 
    }

  • checkoutToSubdirectory在工作区的子目录中执行自动源代码控制检出
  • 例如:
    options { 
        checkoutToSubdirectory('foo') 
    }

  • disableConcurrentBuilds禁止管道的并发执行。可用于防止同时访问共享资源等。
  • 例如:
    options { 
        disableConcurrentBuilds() 
    }

  • disableResume如果控制器重新启动,则不允许该pipeline恢复。
  • 例如:
    options { 
        disableResume() 
    }

  • newContainerPerStage​​​​​​​dockerdockerfile*代理一起使用。指定后,每个阶段将在同一节点上的新容器实例中运行,而不是所有阶段都在同一容器实例中运行
  •  

  • preserveStashes保留已完成构建的存储,以用于阶段重新启动。
  • 例如:
    options { preserveStashes() }

    保留最近完成的构建中的存储,或options { preserveStashes(buildCount: 5) }保留五个最近完成的构建中的存储。

  • quietPeriod设置该pipeline的静默期(以秒为单位),覆盖全局默认值
  • 例如:options { quietPeriod(30) }

  • retry失败时,重试整个管道指定的次数。
  • 例如:options { retry(3) }

  • skipDefaultCheckoutagent默认情况下,在指令中跳过从源代码管理中检出代码。
  • 例如:options { skipDefaultCheckout() }

  • skipStagesAfterUnstable一旦构建状态变为 UNSTABLE,就跳过阶段。
  • 例如:options { skipStagesAfterUnstable() }

  • timeout为流水线运行设置一个超时时间,之后 Jenkins 应该中止流水线。
  • 例子:options { timeout(time: 1, unit: 'HOURS') }

    备注:指定一小时的全局执行超时,之后 Jenkins 将中止流水线运行。

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

  • timestamps将 Pipeline 运行生成的所有控制台输出添加到发出该行的时间。
  • 例如:options { timestamps() }

  • parallelsAlwaysFailFast为pipeline中的所有后续并行阶段设置 failfast true。
  • 例如:options { parallelsAlwaysFailFast() }

    阶段参数:

  • skipDefaultCheckoutagent默认情况下,在指令中跳过从源代码管理中检出代码。
  • 例子:options { skipDefaultCheckout() }

  • timeout为这个阶段设置一个超时时间,之后詹金斯应该中止这个阶段。
  • 例子:options { timeout(time: 1, unit: 'HOURS') }
    pipeline {
        agent any
        stages {
            stage('Example') {
                options {
                    timeout(time: 1, unit: 'HOURS')
                }
                steps {
                    echo 'Hello World'}
            }
        }
    }

  • retry失败时,重试此阶段指定的次数。
  • 例子:options { retry(3) }

  • timestamps将在此阶段生成的所有控制台输出添加到发出该行的时间。
  • 例子:options { timestamps() }

 

(4)parameter

        就是普通的设置参数,可设置在pipeline全局或者某个阶段中,作用范围就会不一样。

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

  • text一个文本参数,可以包含多行。
  • 例如:
    parameters { 
        text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') 
    }

  • booleanParam一个布尔参数。
  • 例如:
    parameters { 
        booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') 
    }

  • choice一个选择参数。
  • 例如:
    parameters { 
        choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') 
    }

  • password一个密码参数。
  • 例如:
    parameters { 
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') 
    }

    例子:

    pipeline {
        agent any
        parameters {
            string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
            text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
            booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
            choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
            password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
        }
        stages {
            stage('Example') {
                steps {
                    echo "Hello ${params.PERSON}"
                    echo "Biography: ${params.BIOGRAPHY}"
                    echo "Toggle: ${params.TOGGLE}"
                    echo "Choice: ${params.CHOICE}"
                    echo "Password: ${params.PASSWORD}"}
            }
        }
    }

(5)tools

        定义用于自动安装和放置在PATH. 如果agent none指定,则忽略。例如自动安装maven、jdk、gradle等

例子:

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