首页 > 其他分享 >03. Jenkins - Groovy(基本语法)

03. Jenkins - Groovy(基本语法)

时间:2023-04-08 16:35:44浏览次数:61  
标签:Groovy 03 name 列表 languages job println Jenkins id

Groovy

Groovy 是一种基于 Java 平台的面向对象语言。在 Jenkins Pipeline 中通常用它来增强 Pipeline 的功能。

详细的语法可以参考:

https://www.w3cschool.cn/groovy/groovy_overview.html

字符串(String)

// 定义全局变量
num = 1
job_name = "Devops-demo-test"

pipeline {
    agent any

    stages {
        stage('字符串类型') {
            steps {
                script {
                    // 输出变量,能够直接使用,不需要 $ 符号
                    println(num)
                    println(job_name)

                    // 定义局部变量并赋值
                    times = num
                    
                    // 想要拼接内容,就需要用到 $ 引用变量
                    println("数字:${times}")

                    // 判断字符串开头结尾
                    println(job_name.startsWith("Dev"))
                    println(job_name.endsWith("test"))

                    // 转换成大小写
                    println(job_name.toUpperCase())
                    println(job_name.toLowerCase())

                    // 获取字符串长度
                    println(job_name.length())
                    println(job_name.size())

                    // 判断是否包含某个值,返回 true 或者 false
                    println(job_name.contains("Dev"))
                    println(job_name.contains("test"))
                }
            }
        }
    }
}

列表(list)

pipeline {
    agent any

    stages {
        stage('列表类型') {
            steps {
                script {
                    job_name = "Devops-demo-test"

                    // 字符串切割,如果没有 toString 方法,返回的是 [Ljava.lang.String;@4554617c 格式的数据
                    job_list = job_name.split("-").toString()
                    
                    // 打印列表
                    println(job_list)

                    // 自己定义列表
                    languages = ["python", "java", "golang"]

                    // 打印列表
                    println(languages)

                    // 获取列表中的元素
                    println("获取列表中的元素")
                    println(languages[0])
                    println(languages.get(0))

                    // 获取列表长度
                    println("获取列表长度")
                    println(languages.size())

                    // 判断列表是否为空
                    println("判断列表是否为空")
                    println(languages.isEmpty())

                    // 列表排序,会影响原始列表
                    println("列表排序")
                    println(languages.sort())
                    println(languages)

                    // 列表翻转,不会影响原始列表
                    println("列表翻转")
                    println(languages.reverse())
                    println(languages)

                    // 给列表添加元素
                    println("给列表添加元素")
                    languages.add("c")
                    println(languages)

                    // 判断列表是否包含元素
                    println("判断列表是否包含元素")
                    println(languages.contains("c"))

                    // 从列表中删除最后一个元素
                    println("从列表中删除最后一个元素")
                    println(languages.pop())
                    println(languages)

                    // 从列表中删除指定元素
                    println("从列表中删除指定元素")
                    println(languages.remove("python"))
                    println(languages)
                }
            }
        }
    }
}

映射(Map)

pipeline {
    agent any

    stages {
        stage('Map 映射类型') {
            steps {
                script {
                    userInfo = ["id": 1, "name": "Dylan"]

                    // 输出
                    println(userInfo)

                    // 获取指定 Key 的值
                    println(userInfo["id"])
                    println(userInfo.id)

                    // 给 key 重新赋值
                    userInfo["name"] = "hello"
                    println(userInfo)

                    // 判断是否包含某个 Key
                    println(userInfo.containsKey("name"))

                    // 判断是否包含某个值
                    println(userInfo.containsValue("hello"))

                    // 获取所有 key,生成列表
                    println(userInfo.keySet())

                    // 移除某个 key
                    userInfo.remove("id")
                    println(userInfo)
                }
            }
        }
    }
}

条件判断(if / switch)

branchName = "test"

pipeline {
    agent any
    stages {
        stage('条件判断') {
            steps {
                script {
                    // if
                    if (branchName == "dev") {
                        println("deploy dev")
                    } else if (branchName == "prod") {
                        println("deploy prod") 
                    } else {
                        println("error") 
                    }

                    // switch
                    switch(branchName) {
                        case "dev":
                            println("deploy dev") 
                            break
                        case "prod":
                            println("deploy prod") 
                            break
                        default:
                            println("error") 
                    }
                }
            }
        }
    }
}

循环遍历(for/times/while)

pipeline {
    agent any
    stages {
        stage('循环遍历') {
            steps {
                script {
                    users = [
                        ["id": 1, "name": "hello"],
                        ["id": 2, "name": "world"],
                        ["id": 3, "name": "jenkins"]
                    ]

                    names = []

                    // for 循环
                    for (i in users) {
                        println(i.id)
                        println(i.name)
                        // 将数据添加到列表
                        names.add(i.name)
                    }

                    // 打印数据
                    println(names)

                    // times 循环指定次数
                    3.times {
                        println("hello world")
                    }

                    // 获取索引
                    3.times {
                        i->
                        println(i)
                    }

                    // while 循环
                    a = 1
                    while(a < 5) {
                        println("while demo")
                        a++
                    }
                }
            }
        }
    }
}

异常处理(try/catch/finally)

pipeline {
    agent any
    stages {
        stage('异常处理') {
            steps {
                script {
                    try {
                        println("hello world")
                        // 这里会报错
                        println(hello)
                    } catch(e) {
                        // 打印错误信息
                        println(e)
                        // 抛出异常,会在所以执行完成后抛出
                        error "异常是:${e}"
                    } finally {
                        println("处理完成")
                    }
                }
            }
        }
    }
}

函数(def)

users = [
    ["id": 1, "name": "hello"],
    ["id": 2, "name": "world"],
    ["id": 3, "name": "jenkins"],
]

pipeline {
    agent any
    stages {
        stage('函数') {
            steps {
                script {
                    // 调用函数
                    name = GetNameById(4)
                    if (name == "null") {
                        println("你所查找的用户不存在")
                    } else {
                        println(name)
                    }
                }
            }
        }
    }
}


// 函数定义
def GetNameById(id)  {
    for (i in users) {
        if (i.id == id) {
            return i.name
        }
    }
    return "null"
}

共享库

通过使用函数知道了可以在 Pipeline 中将很多公共方法抽离出来复用。但是这样的复用也只是单文件的复用。

这样会存在一个问题,随着功能的增加,这个单文件会越开越大。为了解决这个问题,就需要用到共享库的概念。

使用共享库需要用到 GitLab,由于本文是自己测试,就没用私有化部署的 GitLab,如果是公司产品,一定要注意。


创建一个项目,我这里叫 jenkinslib

README 可以根据自己需求看是否需要。


项目目录结构设计:

jenkinslib/
├── resources
├── src
│   └── org
│       └── devops
└── vars

目录说明:

  • src:一般用于存放相关方法的包。
  • resources:一般用于存放资源对象。
  • vars:一般用于声明一些全局变量。

如图所示:

src/org/devops 下面定义一个 tools.groovy 的文件,该文件属于这个项目的 org.devops 包。并在里面定义了一个 GetNameById 函数。


此时就需要去 Jenkins 上面配置共享库:

具体配置如下:

注意,凭据需要自己添加自己 GitLab 的账号密码。


在 Pipeline 中使用共享库:

// 指定 jenkins 共享库
@Library("jenkinslib-devops") _

// 初始化
def libtools = new org.devops.tools()

pipeline {
    agent any
    stages {
        stage('使用共享库') {
            steps {
                script {
                    // 调用函数
                    name = libtools.GetNameById(1)
                    println(name)
                }
            }
        }
    }
}

共享库加载 Resource

Jenkins 提供了读取 resources 下面资源的语法。先在 jenkinslib 项目的 resources 中添加 json 文件:


使用语法生成器加载 Resource:


在 Pipeline 中使用:

@Library("jenkinslib-devops") _

pipeline {
    agent any
    stages {
        stage('使用共享库') {
            steps {
                script {
                    // 使用 resources 中的数据
                    data = libraryResource 'config/data.json'
                    println(data)
                }
            }
        }
    }
}

到此,Groovy 的基本用法就是这些。

标签:Groovy,03,name,列表,languages,job,println,Jenkins,id
From: https://www.cnblogs.com/Dy1an/p/17298726.html

相关文章

  • lvgl 经典编译错误解决之道:section `.bss' is not within region `dram0_0_seg'
    #NodeMCU##PlatformIO#或#ArduinoIDE#能规避lvgl+TFT_eSPI经典编译错误(如下所示)的点不多。Linking.pio\build\nodemcu\firmware.elfld.exe:address0x3fffd538of.pio\build\nodemcu\firmware.elfsection`.bss'isnotwithinregion`dram0_0_seg'collect2.exe......
  • Solon2 之 Groovy 语言开发后端接口项目
    今天再做个新的尝试,用Solon框架写个Groovy后端项目。借助“SolonInitializr”生成个项目模板,会比较方便。1、生成项目模板打开“SolonInitializr”:https://solon.noear.org/start/,在语言那儿选择"Groovy",再选上项目类型为“Gradle-Groovy”。然后点“生成”就会自......
  • 剑指offer03(Java)-数组中重复的数字(简单)
    题目:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,5,3]输出:2或3 限制:2<=n<=1000......
  • navicat 链接 mysql 2059-Authentication plugin 'caching_sha2_password' cannot be
      出现这个原因是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password1、登录Mysql:mysql-uroot-p2、修改......
  • ERROR 658 (HY000): Proxy ERROR: Join internal error: Table 'mysql.proc' doesn'te
    ERROR658(HY000):ProxyERROR:Joininternalerror:Table'mysql.proc'doesn'texist迁移数据库至TDSQL,版本5.0到8.0,执行sql报错现象  查了资料发现mysql8.0的mysql的proc表确实淘汰不用了解决方法使用其他函数替换,JSON_CONTAINS替换为 locate,JSON_Array>>......
  • Cannot read properties of undefined (reading 'offsetWidth') 报错的解决
    今天在运行后台系统时突然发现报以上错误,百思不得其解,因为最近并没有修改过该页面。 源代码如下: 最开始以为是不是用法改了,查询并尝试了许久,并没有什么用,同时发现出现一个css找不到的报错:  猜测是否引用elementplus样式版本文件不对。因为昨天有吧node_module删了,更......
  • 区间合并 acwing803
    linkcode#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intmain(){ intn; intans=1,tpr=0; vector<pair<int,int>>v; intl,r; cin>>n; for(inti=1;i<=n;i++){ cin>>l>>r;......
  • Lab03-01
    目录样本信息壳信息字符串信息导入表信息样本分析IDA分析以行为作为切入点推测查杀思路总结技巧样本信息壳信息无(PEID显示有壳,但其实仅仅是用汇编写的,加入了太多的混淆。)字符串信息导入表信息样本分析IDA分析样本有太多的花指令影响静态阅读代码。好在代码不多。......
  • Jenkins Vue Windows(FreeSSHd)整合
      创建项目第一次创建执行一次如下的代码。#进入Jenkins工作空间下hxkj项目目录cd/root/.jenkins/workspace/pc_back#下面的命令只需要执行一次,后续可以删除####npm切换为淘宝源npmconfigsetregistryhttp://registry.npm.taobao.org/#安装yarnnpmiyarn......
  • Jenkins - 构建 MeterSphere 平台测试计划
    Jenkins下载插件点击链接进入发布页面,按照平台版本下载:metersphere/jenkins-plugin下载*.hpi文件安装插件系统管理-插件管理-高级-DeployPlugin-选择文件(.hpi)-DEPLOYPipeline新建流水线,定义Pipelinescript如下:MeterSphere插件共提供了以下参数供用户......