pipeline使用

一、入门


(一)、介绍

​ Jenkins Pipeline是一套插件,支持将连续输送Pipeline实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过PipelineDSL为代码创建简单到复杂的传送Pipeline。

(二)、脚本式

  1. 介绍

    脚本式pipeline是基于groovy的DSL语言实现的,为Jenkins用户提供了大量的灵活性和可扩展性。

  2. 示例

    node {
      ...
      stage('test') {
      	if (env.BRANCH_NAME == 'master') {
      		echo 'master'
      	} else {
      		echo 'error'
      	} 
      }
    }
    

(三)、声明式

  1. 介绍

    声明式是jenkins2.5版本后开始,是一种更简单、更结构化的语法;可以结合脚本式一起使用。

  2. 示例

    pipeline {
      agent{}
      tools{}
      parameters{}
      ....
    }
    

二、基本语法


(一)、基本内置关键字

  1. pipeline

    pipeline根节点

  2. environment

    定义公共的环境变量

    environment {
      __REBOOT = "${env.__REBOOT}"
      __ROPE_GIT_URL = "${map.GIT_URL}"
      SSH_AUTH = "ssh"
    }
    
  3. tools

    定义工具,自动下载并加入PATH

    tools {
    	maven 'maven-3.6.3'
    }
    
  4. agent

    指定在哪个节点执行pipeline

    agent {
      label 'test'
    }
    
  5. stages

    多个stage的父节点

  6. stage

    代表整个pipeline中的一个阶段,stage里面是具体的steps

  7. steps

    定义在stage阶段里面,代表具体如何执行

  8. script

    必须在scrip中t,才能中用groovy脚本

    stage('test'){
    	steps {
    		script {
    			switch(env.BRANCH_NAME) {
    				....
    			}
    		}
    	}
    }
    
  9. 其他

     # 打印环境变量
     sh "printenv"
    

(二)、内置步骤

  1. dir()

    切换目录

  2. deleteDir()

    删除当前目录

  3. fileExists()

    判断文件是否存在

    fileExists('/tmp/test.jar')
    
  4. isUnix()

    是否为Unix系统

  5. pwd()

    当前目录

  6. writeFile

    写文件

    writeFile file: 'test.txt', text: '写入文件内容' , encoding: 'UTF-8'
    
  7. readFile

    读文件

    readFile encoding: 'UTF-8', file: 'test.txt'
    
  8. sleep

    睡眠一定时间段

    // 睡眠5s
    sleep time: '5', unit: 'SECONDS'
    

三、配置


(一)、参数配置 parameters

  1. choice

    // 选项参数 
    parameters: [
       choice(choices: ['release', 'rollbak'], description: '部署类型(发布项目/回滚项目)', name: 'deployType')
     ]
    
  2. string

    // 字符串参数
    parameters {
      string defaultValue: 'test', description: '测试', name: 'name', trim: false
    }
    
  3. text

    // 文本参数
    parameters {
      text defaultValue: '', description: '', name: ''
    }
    
  4. 其他

    // 布尔值参数
    parameters {
      booleanParam defaultValue: false, description: '', name: ''
    }
    // 密码参数
    parameters {
      password defaultValue: '', description: '', name: ''
    }
    

(二)、选项配置options

  1. buildDiscarder()

    options {
      //为最近的流水线运行的特定数量保存组件和控制台输出
      buildDiscarder(logRotator(numToKeepStr: '10')) 
    }
    
  2. disableConcurrentBuilds()

    options {
      //不允许同时执行流水线。 可被用来防止同时访问共享资源等
      disableConcurrentBuilds()
    }
    
  3. skipDefaultCheckout()

    options {
      //跳过从源代码控制中检出代码的默认情况。
      skipDefaultCheckout()
    }
    
  4. timeout()

    opstions {
      //设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。
      timeout(time: 1, unit: 'HOURS')
    }
    

(三)、触发器配置triggers

  1. cron

    // 每天下午15执行
    triggers {
      cron 'H 0 15 * *'
    }
    
  2. pollSCM

    triggers {
      pollSCM ignorePostCommitHooks: true, scmpoll_spec: 'H 0 15 * *'
    }
    
  3. upstream

    // 只有构建稳定时触发
    triggers {
      upstream 'test-pipeline'
    }
    // 即使构建失败时也会触发
    triggers {
      upstream threshold: 'FAILURE', upstreamProjects: 'test-pipeline'
    }
    // 即使构建不稳定时也会触发
    triggers {
      upstream threshold: 'UNSTABLE', upstreamProjects: 'test-pipeline'
    }
    

四、其他语法


(一)、when

  1. branch

    当正在构建的分支也给出的分支模式匹配时执行阶段。注意:这个仅适用于多分支pipeline

    when {
      branch 'master'
    }
    
  2. environment

    当指定的环境变量设置为给定值时执行阶段

    environment {
      environment name: 'DEPLOY', value: 'test'
    }
    
  3. expression

    当指定的表达式求值为true时执行阶段

    when { 
      expression { return params.DEBUG_BUILD } 
    }
    
  4. not

    当嵌套条件为false时执行阶段。必须包含一个条件

    when {
      not {
        branch 'master'
      }
    }
    
  5. allOf

    当嵌套条件全为真时执行阶段。必须包含一个条件

    when {
      allOf {
        branch 'master';
        environment name: 'DEPLOY', value: 'test'
      }
    }
    
  6. anyOf

    当嵌套条件至少包含一个条件为真时执行阶段。必须包含一个条件

    when {
      anyOf {
      	branch 'master';
        branch 'develop'
      }
    }
    
  7. equals

    当期待值等于实践值时执行阶段

    when {
      equals expected: 'rollbak', 
      actual: approvalMap['deployType'];
    }
    

(二)、input

  1. 简单使用

    input {
      message "是否发布当前版本?"
      ok "发布"
    }
    
  2. 高级使用

    script {
      approvalMap = input (
        message: '发布或者回滚项目?',
        ok: '确定',
        parameters: [
          choice(choices: ['release', 'rollbak'], description: '部署类型(发布项目/回滚项目)', name: 'deployType')
        ],
        // 限制提交的用户id
        submitter: 'user01',
        submitterParameter: 'approver'
      )
    }
    

(三)、post

  1. always

    无论pipeline当前是什么执行状态,都会执行

    post {
      always {
        deleteDir()
      }
    }
    
  2. failure

    当前完成状态是失败时执行

    post {
      failure {
        echo '失败'
      }
    }
    
  3. success

    当前完成状态是成功时执行

    post {
      success {
        echo '成功'
      }
    }
    
  4. 其他

    1. changed
    当前状态和上一次构建完成状态不一致时执行
    2. aborted
    当前状态时人为终止状态时执行
    3. unstable
    当前完成状态为不稳定时执行
    4. cleanup
    清理条件块
    

五、插件使用


(一)、dingtalk

dingtalk (
  robot: "${__REBOOT}",
  type: 'ACTION_CARD',
  title: "你有新的发布消息,请注意查收",
  text: [
    "# 项目名称-${APPLICATION_NAME}",
    "-----------------------",
    "* 任务: #${BUILD_NUMBER}  ",
    "* 部署状态: 成功 ",
    "* 执行人: ${BUILD_USER_ID}  ",
    "* 执行人描述: ${BUILD_USER}  ",
    "* 部署环境: ${__DEPLOY_ENV}  ",
    "* 部署主机: ${DEPLOYMENT}  ",
    "* 部署路径: /home/test/${APPLICATION_NAME}  ",
    "* 镜像名称: ${HABOR_REGISTRY}/${DEPARTMENT}/${APPLICATION_NAME}:${BUILD_NUMBER}  ",
    "-----------------------"

  ],
  btns: [
    [
      title: 'jenkins详情',
      actionUrl: "${BUILD_URL}"
    ]
  ],
  btnLayout: 'V'
)

(二)、configFileProvider

configFileProvider([configFile(fileId: 'default.env.config', variable: 'value')]) {
  config = readFile encoding: 'UTF-8', file: "${value}"
  writeFile file: '.env', text:"${config}"
}
posted @ 2021-01-26 16:02  qms19  阅读(349)  评论(0编辑  收藏  举报