joeの小窝

Loading...

jenkins pipeline详解

jenkins声明式pipeline

1、什么是pipeline

  • pipeline是jenkins的核心功能,提供一组可扩展的工具

  • 通过pipeline的DSL语法可以完成简单到复杂的交付流水线实现

  • 声明式是jenkins流水线更友好的特性。

  • jenkins可以定义jenkins的执行步骤

2、为什么使用pipeline

img

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

  • 代码化: 流水线是在代码中实现的,通常会存放到源代码控制,使团队具有编辑、审查和更新他们项目的交付流水线的能力。
  • 耐用性:流水线可以从Jenkins的master节点重启后继续运行。
  • 可暂停的:流水线可以由人功输入或批准继续执行流水线。
  • 解决复杂发布: 支持复杂的交付流程。例如循环、并行执行。 可扩展性: 支持扩展DSL和其他插件集成。

pipeline整体结构

jenkinsfile使用2种不同的语法编写,分别是声明式和脚本式

  • 声明式和脚本式的流水线从根本上是不同的。
  • 声明式是jenkins流水线更友好的特性。
  • 脚本式的流水线语法,提供更丰富的语法特性。
  • 声明式流水线使编写和读取流水线代码更容易设计。

一个完整的声明式pipeline的整体结构如下图:

  • 实线是必须的

  • 虚线是可选的

img

一个声明式pipeline的基本示例:

#!groovy
String workspace = "/var/lib/jenkins"
pipeline {
    agent {
        node {   // 选择一个节点 标签带有 master
            label "master"
            customWorkspace "$workspace"
        }
    }
    options {
        timestamps() //日志会有时间
        skipDefaultCheckout() //删除隐式checkout scm语句
        disableConcurrentBuilds() //禁止并行,禁止一次执行多个任务,前一个任务执行完后,才能执行下一个任务
        timeout(time: 1, unit: 'HOURS')
    }
    triggers {}
    parameters {}
    environment {}
    tools {}
    stages {
        //下载代码
        stage("GetCode"){   //为阶段指定名称
            steps{  //步骤
                timeout(time:5,unit:"MINUTES"){
                    script{ //具体的运行代码
                        println('获取代码')
                    }
                }
            }
        }
        //构建
        stage("Build"){
            steps{
                timeout(time:20, unit:"MINUTES"){
                    script{
                        println('应用打包')
                    }
                }
            }
        }
        //代码扫描
        stage("CodeScan"){
            steps{
                timeout(time:30, unit:"MINUTES"){
                    script{
                        print("代码扫描")
                    }
                }
            }
        }
    }
    post {
        always {
            script {
                println("always")
            }
        }
        success {
            script {
                currentBuild.description = "\n 构建成功!"
            }
        }
        failure {
            script {
                currentBuild.description = "\n 构建失败!"
            }
        }
        aborted {
            script {
                currentBuild.description = "\n 构建取消!"
            }
        }
    }
  
}
posted @ 2026-04-15 15:25  乔的港口  阅读(27)  评论(0)    收藏  举报