• 新手真的别再用过时的jenkins freestyle了,10分钟教你搞定快速编写jenksinfile,快速离线调试


    Pipeline是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。它通过Domain Specific Language(DSL)syntax定义Pipeline As Code并且实现持续交付的目的。

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

    注:Jenkins 1.0 只能通过UI界面手动操作来“描述”流水线; Jenkins 2.0 开始支持pipeline as code.

    为什么要使用pipeline#

    1.代码: pipeline 以代码的形式实现,通过被捡入源代码控制,使团队能够编译,审查和迭代其CD流程

    2.可连续性: jenkins 重启或者中断后都不会影响pipeline job

    3.停顿: pipeline 可以选择停止并等待人工输入或者批准,然后在继续pipeline运行

    4.多功能:  pipeline 支持现实世界的复杂CD要求, 包括fork、join子进程,循环和并行执行工作的能力

    5.可扩展: pipeline 插件支持其DSL的自动扩展以及其插件集成的多个选项。

    Pipeline结构快速解析#

    Jenlins Pipeline的脚本语法是由Groovy语言实现,学习成本较低,简单易学。 目前Jenlins Pipeline支持两种语法:

    • Declarative 声明式(在Pipeline plugin 2.5中引入)

    • Scripted Pipeline 脚本式

    图片

    image.png

    声明式pipeline 基本语法和表达式遵循 groovy语法,但是有以下例外:

    • 声明式pipeline 必须包含在固定格式的pipeline{} 块内

    • 每个声明语句必须独立一行, 行尾无需使用分号

    • 块(Blocks{}) 只能包含章节(Sections),指令(Directives),步骤(Steps),或者赋值语句

    • 属性引用语句被视为无参数方法调用。 如input()

    • 块(Blocks{})

    由大括号括起来的语句: 如 Pipeline{}, Sections{}, parameters{}, script{}

    • 章节(Sections)

    通常包括一个或者多个指令或步骤 如 agent,post,stages,steps

    • 指令(Directives)

    environment, options, parameters, triggers, stage, tools, when

    • 步骤(steps)

    执行脚本式pipeline, 如script{}

    Jenkins pipeline包含两类元素:stages和steps。如下图:

    图片

    image.png

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

    Step:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenklins Plugin提供,例如:sh ‘make’ Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。

    pipeline{
        agent any
        stages {
            stage('Build') {
                steps{
                    echo 'This is a build step' 
                }
            }
            stage('Test') {
                steps{
                    echo 'This is a test step'  
                }
            }
            stage('Deploy') {
                steps{
                    echo 'This is a deploy step'    
                }
            }
        }
    }
    
    

    Pipeline编写的辅助工具#

    Snipper Generator(代码片段生成器,语法检查器)#

    图片

    image.png

    Replay Pipeline#

    重放pipeline,可以修改script,修改后的不存入config.xml图片

    DSL Reference 语法参考手册#

    • 全局变量引用

    图片

    image.png

    Jenkinsfile本地校验#

    Jenkins Pipeline Linter Connector  (vscode 插件)#

    图片

    image.png

    如下图所示,插件按照后需要配置如下参数:

    • jenkins.pipeline.linter.connector.url 是 Jenkins 期望的 POST 请求地址,包含你要校验的 Jenkinsfile 文件。通常为 http:///pipeline-model-converter/validate。

    • jenkins.pipeline.linter.connector.user 允许指定你的 Jenkins 用户名。

    • jenkins.pipeline.linter.connector.pass 允许指定你的 Jenkins 密码。

    • jenkins.pipeline.linter.connector.crumbUrl 当你的 Jenkins 启用了 CRSF 时必须指定。通常为 http:///crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)。

    图片Ctrl+Shift+P执行如下命令,对编写的Jenkinsfile进行校验图片图片

    Jenkins Declarative Parser#

    ❯ jdp check data/valid/complex-deployment/Jenkinsfile
    Checkingdata/valid/complex-deployment/Jenkinsfile
    Looks valid! Great work!
    
    
  • 相关阅读:
    SQL优化的一些建议,希望可以帮到和我一样被SQL折磨的你
    【论文极速读】Prompt Tuning——一种高效的LLM模型下游任务适配方式
    HTB-Heist(域、rc4_hmac、SeRestorePrivelege权限提权)
    Pytorch torch.optim.lr_scheduler API如何调整学习率
    Windows 11可使AMD芯片性能下降15%
    踩坑记 BSS段的初始化
    记一次 Nuxt 3 在 Windows 下的打包问题
    如何将表格内容拆分至多列内容
    [ Linux Busybox ] getopt32 命令解析
    关于我开始热爱生活,也会把该做的做好这件事
  • 原文地址:https://www.cnblogs.com/FLY_DREAM/p/18125099