jenkins中的pipline

Jenkins Pipeline 的核心概念

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

Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变

Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。

持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完整过程的自动化表现。软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

Pipeline提供了一组可扩展的工具,通过Pipeline Domain Specific Language(DSL)syntax可以达到Pipeline as Code(Jenkinsfile存储在项目的源代码库)的目的。

Stage:阶段,一个Pipeline可以划分成若干个Stage,每个Stage代表一组操作,例如:“Build”,“Test”,“Deploy”。(Stage是一个逻辑分组的概念,可以跨多个Node)

Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。

Step:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenklins Plugin提供,例如:sh ‘make’
注:

Pipeline五大特性

代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑、审查和迭代其CD流程。
可持续性:Jenklins重启或者中断后都不会影响Pipeline Job。
停顿:Pipeline可以选择停止并等待任工输入或批准,然后再继续Pipeline运行。
多功能:Pipeline支持现实世界的复杂CD要求,包括fork/join子进程,循环和并行执行工作的能力
可扩展:Pipeline插件支持其DSL的自定义扩展以及与其他插件集成的多个选项。

pipline脚本有很多中写法,下面写的是比较简单的一种

pipeline {

  agent any #在可用的节点上运行,此处可以选择节点

  stages {

    stage('克隆代码') {

      steps {

        echo '正在克隆代码,请稍等'

        deleteDir() #清空发布目录

        git 'ssh://git@xxx.xxx.xxx:xxx/golang/api.git'

       }

    }

    stage('制作Docker镜像并上传服务器') {

      steps {

        echo '正在创建docker镜像,请稍等'

        sh '/opt/jenkins_piplines/golang/build_xxx-api.sh' #此处写成了脚本,若不需要脚本可直接在此处编写执行的命令

      }

    }

    stage('更新xxx服务') {

       steps {

        echo '正在更新代码,请稍等'

        sh '/opt/jenkins_piplines/golang/start_xxx-api.sh' #此处写成了脚本,若不需要脚本可直接在此处编写执行的命令

       }

     }

    stage('清空目录') {

      steps {

        script{

          sh("ls -al ${env.WORKSPACE}")

          deleteDir()

          sh("ls -al ${env.WORKSPACE}")

        }

      }

    }

  }

  options{

    timestamps()

  }

  post {

     always {

      script {

        println("构建后操作")

      }

    }

    success {

       script {

        currentBuild.description = "构建成功!"

      }

    }

    failure {

      script {

        currentBuild.description = "构建失败!"

      }

     }

    aborted {

       script {

        currentBuild.description = "构建取消!"

      }

    }

   }

}

上一篇:licode 源码之pipline 分析


下一篇:redis的pipline使用