Pipeline介绍

Pipeline 是Jenkins 2.0的精髓,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

为什么要使用pipeline

  • 1. 代码: pipeline 以代码的形式实现,通过被捡入源代码控制, 使团队能够编译,审查和迭代其cd流程
  • 2 可连续性: jenkins 重启 或者中断后都不会影响pipeline job
  • 3.停顿: pipeline 可以选择停止并等待人工输入或者批准,然后在继续pipeline运行
  • 4.多功能:  pipeline 支持现实世界的复杂CD要求, 包括fork、join子进程,循环和并行执行工作的能力
  • 5.可扩展: pipeline 插件支持其DSL的自动扩展以及其插件集成的多个选项。

 

Pipeline的几个基本概念:

  • Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是slave,是执行Step的具体运行期环境。
  • Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供

 

简单样例

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_运维

 

hello world

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_02

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_03

 

 

添加stage步骤

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_04

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_05

jenkins的pipeline调用python脚本 jenkins pipeline build job_Jenkins_06

 

 

 

Blue Ocean

这个需要插件

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_07

jenkins的pipeline调用python脚本 jenkins pipeline build job_Jenkins_08

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_09

 

 

 

input中断



node ("master"){

    stage('第1步拉代码'){

        echo "拉代码"

    }

    stage('第2步编译'){

        echo "编译"

    }

    stage('第3步打包'){

        echo "打包"

    }

    stage('是否发布'){

        input "发布"

    }

   

}



jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_10

jenkins的pipeline调用python脚本 jenkins pipeline build job_运维_11

 

 

执行shell命令



node ("master"){

    stage("先看看主机名")

       sh "hostname"

    stage("在看看磁盘空间")

       sh("df -h")

    stage("再看看内存")

       sh("free -m")

}



jenkins的pipeline调用python脚本 jenkins pipeline build job_运维_12

 

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_Jenkins_13

 

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_java_14

 

 

 

执行个脚本

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_15

jenkins的pipeline调用python脚本 jenkins pipeline build job_运维_16

 

 

 

git拉一下代码

我不知道语法怎么办?

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_17

jenkins的pipeline调用python脚本 jenkins pipeline build job_运维_18

jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_19

 

 



node ("master"){

    stage('第1步拉代码'){

        echo "拉代码"

        git credentialsId: '03fd8295-c536-4871-9794-1c37394676e0', url: 'git@gitlab.corp.XXX.com:wangxu/ops.git'

    }

}



jenkins的pipeline调用python脚本 jenkins pipeline build job_git_20

jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_21

 

 

 

 

编译一下

jenkins的pipeline调用python脚本 jenkins pipeline build job_java_22

 

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_jar_23

 

 

 

打包



node ("master"){

    stage('第1步拉代码'){

        echo "拉代码"

        git credentialsId: '03fd8295-c536-4871-9794-1c37394676e0', url: 'git@gitlab.corp.XXX.com:wangxu/ops.git'

    }

    stage('第2步编译'){

        echo "编译"

        sh "source /etc/profile && /usr/local/maven/bin/mvn clean compile"

    }

    stage('第3步发送文件'){

        echo "打包,有一个mail模块是系统级别的,需要sudo"

        sh "sudo /usr/local/maven/bin/mvn package"

        echo "完成后 修改一下权限,否则下一次麻烦"

        sh "sudo chown -R  jenkins: ."

        sh "find -name '*SNAPSHOT.jar' "

    }

 

}



jenkins的pipeline调用python脚本 jenkins pipeline build job_java_24

 

 

 

再把打包的文件放到下载服务器上



node ("master"){

    stage('第1步拉代码'){

        echo "拉代码"

        git credentialsId: '03fd8295-c536-4871-9794-1c37394676e0', url: 'git@gitlab.corp.XXX.com:wangxu/ops.git'

    }

    stage('第2步编译'){

        echo "编译"

        sh "source /etc/profile && /usr/local/maven/bin/mvn clean compile"

    }

    stage('第3步发送文件'){

        echo "打包,有一个mail模块是系统级别的,需要sudo"

        sh "sudo /usr/local/maven/bin/mvn package"

        echo "完成后 修改一下权限,否则下一次麻烦"

        sh "sudo chown -R  jenkins: ."

        sh "find -name '*SNAPSHOT.jar' "

    }

    stage('是否发布'){

        input "发布"

    }

    stage("放到下载服务器上"){

        sh "sudo cp ./account-email/target/account-email-1.0.0-SNAPSHOT.jar /home/admin/webserver/html/download && sudo chown  -R admin: /home/admin/webserver/html/download"

    }

}



 

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_git_25

 

 

slave端下载包、发布



node ("master"){

    stage('第1步拉代码'){

        echo "拉代码"

        git credentialsId: '03fd8295-c536-4871-9794-1c37394676e0', url: 'git@gitlab.corp.XXX.com:wangxu/ops.git'

    }

    stage('第2步编译'){

        echo "编译"

        sh "source /etc/profile && /usr/local/maven/bin/mvn clean compile"

    }

    stage('第3步发送文件'){

        echo "打包,有一个mail模块是系统级别的,需要sudo"

        sh "sudo /usr/local/maven/bin/mvn package"

        echo "完成后 修改一下权限,否则下一次麻烦"

        sh "sudo chown -R  jenkins: ."

        sh "find -name '*SNAPSHOT.jar' "

    }

    stage('是否发布'){

        input "发布"

    }

    stage("放到下载服务器上"){

        sh "sudo cp ./account-email/target/account-email-1.0.0-SNAPSHOT.jar /home/admin/webserver/html/download && sudo chown  -R admin: /home/admin/webserver/html/download"

    }

    node("test-mall-10.6.76.25"){

        stage("slave-test-mall"){

            echo "test-mall下载一下"

            sh "cd /home/admin/;wget http://download.corp.XXX.com/account-email-1.0.0-SNAPSHOT.jar"

        }

        stage("我检查一下文件"){

            sh ('ls /home/admin/account-email-1.0.0-SNAPSHOT.jar')

        }

        stage("确认是否发布"){

            input("发布")

            echo "我发布了啊,没有后悔药"

            echo "执行发布命令"

        }

    }

}



jenkins的pipeline调用python脚本 jenkins pipeline build job_java_26

 

 

jenkins的pipeline调用python脚本 jenkins pipeline build job_Jenkins_27