k8s Jenkins pipeline 声明式语法和脚本式语法

本文详细介绍了 Jenkins Pipeline 的核心概念,包括声明式和脚本式语法。Pipeline 是 Jenkins 的关键特性,用于实现持续交付流程的自动化。声明式语法强调结构和易读性,而脚本式语法则更为灵活。文中还涵盖了环境变量、选项、触发器、并行执行等高级特性,并对比了两种语法的优缺点。此外,文章还提及了与 Kubernetes、SonarQube、Harbor、Nexus 和 GitLab 的集成,展示了完整的 CI/CD 生态系统。
摘要由CSDN通过智能技术生成

  • Jenkins pipeline 语法介绍

  • Jenkins pipeline (流水线)是一套运行于 jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。

    它把持续提交流水线(Continuous Delivery Pipeline)的任务集成到 Jenkins 中。
  • pipeline 是 jenkins2.X 最核心的特性, 帮助 jenkins 实现从 CI 到 CD 与 DevOps 的转变。

    持续提交流水线(Continuous Delivery Pipeline)会经历一个复杂的过程: 从版本控制、向用户和客户提交软件,软件的每次变更(提交代码到仓库)到软件发布(Release)。

    这个过程包括以一种可靠并可重复的方式构建软件,以及通过多个测试和部署阶段来开发构建好的软件(称为 Build)。
  • Jenkins pipeline 本质

  • 本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 Pipeline 向 Jenkins 中添加了一组强大的工具, 支持简单的 CI 到全面的 CD pipeline。

    通过对一系列的相关任务进行建模, 用户可以利用pipeline 的很多特性:
    1、代码:Pipeline 以代码的形式实现,使团队能够编辑,审查和迭代其 CD 流程。
    2、可持续性:Jenkins 重启或者中断后都不会影响 Pipeline Job。
    3、停顿:Pipeline 可以选择停止并等待人工输入或批准,然后再继续 Pipeline 运行。
    4、多功能:Pipeline 支持现实复杂的 CD 要求,包括循环和并行执行工作的能力。
    5、可扩展:Pipeline 插件支持其 DSL 的自定义扩展以及与其他插件集成的多个选项。
  • DSL 是什么?
    DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言(下简称 DSL);而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证,而是 General Purpose Language 的简称,即通用编程语言,也就是我们非常熟悉的 Objective-C、Java、Python 以及C 语言等等。

总结:
1.Jenkins Pipeline 是一组插件,让 Jenkins 可以实现持续交付管道的落地和实施。
2.持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完整过程的自动化表现。
3.软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

  • Jenkins pipeline 入门

  • pipeline 脚本是由 groovy 语言实现的但无需专门学习 groovy
  • Groovy 是一种基于 JVM(Java 虚拟机)的敏捷开发语言,它结合了 Python、Ruby 和Smalltalk 的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。

    由于其运行在 JVM 上的特性,Groovy 也可以使用其他非 Java 语言编写的库。
  • pipeline 支持两种语法:
    -Declarative:声明式
    -Scripted pipeline :脚本式

  • 声明式 pipeline 语法:

  • 官网:
    https://www.jenkins.io/doc/book/pipeline/syntax/
    https://www.jenkins.io/zh/doc/book/pipeline/syntax/
  • 声明式语法包括以下核心流程:
    1.pipeline : 声明其内容为一个声明式的 pipeline 脚本
    2.agent: 执行节点(job 运行的 slave 或者 master 节点)
    3.stages: 阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
    4.stage: 阶段,被 stages 包裹,一个 stages 可以有多个 stage
    5.steps: 步骤,为每个阶段的最小执行单元,被 stage 包裹
    6.post: 执行构建后的操作,根据构建结果来执行对应的操作

  • 根据上面流程创建一个简单的 pipeline
    pipeline{
      agent any
      stages{
        stage("This is first stage"){
          steps("This is first step"){
            echo "I am GF"
                                 }
                          }
                  }
     post{
       always{
          echo "The process is ending"
             }
        }
    }



    Pipeline:作用域:应用于全局最外层,表明该脚本为声明式 pipeline 是否必须:必须

    agent:作用域:可用在全局与 stage 内,agent 表明此 pipeline 在哪个节点上执行
    是否必须:是


    参数:any,none, label, node,docker,dockerfile

    agent any #运行在任意的可用节点上

    agent none #全局不指定运行节点,由各自 stage 来决定

    agent { label 'master' } #运行在指定标签的机器上,具体标签名称由 agent 配置决定

    agent { 

     node {
     label 'my-defined-label'
     customWorkspace 'xxxxxxx'

     } 
    }

    #node{ label 'master'} 和 agent { label 'master' }一样,但是 node 可以扩展节点信息,允许额外的选项 (比如 customWorkspace )。

    agent { docker 'python' } #使用指定的容器运行流水线
    如:
    agent {
     docker {
     image 'maven:3-alpine'
     label 'my-defined-label'
     args '-v /tmp:/tmp'
     }
    }

    #定义此参数时,执行 Pipeline 或 stage 时会动态的在具有 label 'my-defined-label'标签的node 提供 docker 节点去执行 Pipelines。

    docker 还可以接受一个 args,直接传递给 docker run 调用。

    agent {
     // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/

     dockerfile {
     filename 'Dockerfile.build'
     dir 'build'
     label 'my-defined-label'
     additionalBuildArgs '--build-arg version=1.0.2'
     }
    }
  • Jenkins pipeline 声明式语法

  • Environment

  • environment 指令指定一系列键值对,这些键值对将被定义为所有 step 或 stage-specific step 的环境变量,具体取决于 environment 指令在 Pipeline 中的位置。

    该指令支持一种特殊的方法 credentials(),可以通过其在 Jenkins 环境中的标识符来访问预定义的凭据。

    对于类型为“Secret Text” 的凭据,该 credentials()方法将确保指定的环境变量包含 Secret Text 内容;

    对于“标准用户名和密码”类型的凭证,指定的环境变量将被设置为 username:password 并且将自动定义两个附加的环境变量:

    MYVARNAME_USR 和 MYVARNAME_PSW。

    pipeline {
    agent any
    environment { 
    CC = 'clang' 
    }
    stages {
    stage('Example') {
    steps {
    sh 'printenv'
    }
    }
    }
    }
  • Options

  • options 指令允许在 Pipeline 本身内配置 Pipeline 专用选项。
  • Pipeline 本身提供了许多选项,例如 buildDiscarder,但它们也可能由插件提供,例如 timestamps。 

    Option
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值