如何使用groovy开发pileline共享库

什么是groovy

Groovy是一种基于Java平台的编程语言,它是一种动态语言,同时也是一种脚本语言,可以与Java代码相互操作,其语法类似于Java,但是具有更强的灵活性和简洁性。
Groovy与Java之间的交互性非常好,可以直接使用Java的类和库,同时也可以在Java中使用Groovy编写的代码。Groovy提供了很多Java不具备的特性,如闭包、动态类型、DSL等。
Groovy还提供了一些简化Java编程的语法糖,如集合操作、字符串处理、正则表达式等。Groovy还支持元编程,即在运行时修改代码本身。
Groovy广泛应用于Java平台的开发领域,例如Gradle构建工具、Jenkins持续集成工具、Spock测试框架等。同时,Groovy也逐渐被用于Web开发、大数据分析和脚本编写等领域。

为什么要开发共享库

一个公司的不同项目之间可以流程大体相思,对于公共的部分开发成公共资源,省时省力,所以jenkins的核心是pipeline,pipeline的核心是groovy.

groovy语言特性

Groovy 是一种动态语言,它具有以下特性:

  1. 与 Java 互操作性:Groovy 运行在 JVM 上,可以直接调用 Java 类库,也可以被 Java 调用。因此 Groovy 可以很好地与 Java 代码集成,能够轻松地与现有的 Java 代码进行交互。
  2. 动态类型:Groovy 支持动态类型,它允许在运行时修改变量类型。这使得 Groovy 编程更加灵活,因为它不需要在编译时指定变量类型。
  3. 简化的语法:Groovy 具有简化的语法,它可以在很少的代码行中完成很多工作。例如,Groovy 可以省略语句结尾的分号,并且可以使用点符号来访问对象的属性和方法。
  4. 支持函数式编程:Groovy 支持闭包和函数式编程,它可以通过在代码中传递函数作为参数来简化代码。这使得 Groovy 更适合处理函数式编程任务。
  5. 字符串处理:Groovy 具有强大的字符串处理能力,它支持使用 GString(Groovy 字符串)来创建动态字符串。GString 可以在字符串中包含变量或表达式,并且这些变量或表达式会在字符串解析时被计算。

groovy基础语法

变量

Groovy中的变量声明可以省略类型,如:

def name = 'Tom'
int age = 18

控制语句

if语句

Groovy中的if语句与Java基本相同,如:

if (score > 90) {
    println '优秀'
} else if (score > 60) {
    println '及格'
} else {
    println '不及格'
}

循环语句

Groovy中的循环语句也与Java基本相同,如:

for (i in 0..9) {
    println i
}

while (i < 10) {
    println i
    i++
}

方法

Groovy中的方法定义也与Java基本相同,如:

def greet(name) {
    println "Hello, $name!"
}

字符串

Groovy中的字符串支持使用单引号、双引号和三个单引号来定义,如:

def name = 'Tom'
def desc = "He's a boy."
def html = '''<html>
    <head>
        <title>Groovy</title>
    </head>
    <body>
        Hello, world!
    </body>
</html>'''

列表

Groovy中的列表使用方括号定义,如:

def list = [1, 2, 3]
list.each { println it }

Map

Groovy中的Map使用大括号定义,如:

def map = [name: 'Tom', age: 18]
println map.name

Groovy中的类定义与Java类似,如:

class Person {
    def name
    int age
    
    def sayHello() {
        println "Hello, I'm $name, $age years old."
    }
}
def tom = new Person(name: 'Tom', age: 18)
tom.sayHello()

jenkins共享库结构

(root)
+- src                     # Groovy source files
|   +- org
|       +- foo
|           +- Bar.groovy  # for org.foo.Bar class
+- vars
|   +- foo.groovy          # for global 'foo' variable
|   +- foo.txt             # help for 'foo' variable
+- resources               # resource files (external libraries only)
|   +- org
|       +- foo
|           +- bar.json    # static helper data for org.foo.Bar

src 目录应该看起来像标准的 Java 源目录结构。当执行流水线时,该目录被添加到类路径下。
vars 目录定义可从流水线访问的全局变量的脚本。 每个 *.groovy 文件的基名应该是一个 Groovy (~ Java) 标识符, 通常是 camelCased。 匹配 *.txt, 如果存在, 可以包含文档, 通过系统的配置标记格式化从处理 (所以可能是 HTML, Markdown 等,虽然 txt 扩展是必需的)。
这些目录中的 Groovy 源文件 在脚本化流水线中的 “CPS transformation” 一样。
resources 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。 目前,内部库不支持该特性。
根目录下的其他目录被保留下来以便于将来的增强。注:src目录必须存在,其他可以没有。

如何使用grooby开发共享库

在Jenkins中使用Groovy开发Pipeline共享库有以下步骤:

  1. 创建共享库存储库
    在代码托管平台(如GitHub、GitLab等)上创建一个新的存储库来存储你的共享库代码。
  2. 创建共享库目录结构
    在存储库中创建以下目录结构:
vars/
    yourFunction.groovy
src/
    yourPackage/
        yourClass.groovy

其中,vars/ 目录中存放的是变量和方法定义的脚本,而 src/ 目录中存放的是类定义的脚本。
3. 编写共享库脚本
vars/ 目录中创建一个名为 yourFunction.groovy 的文件,并编写你的函数定义,如下所示:

def call(String param1, String param2) {
    echo "Hello ${param1} and ${param2}"
}

src/ 目录中创建一个名为 yourClass.groovy 的文件,并编写你的类定义,如下所示:

package yourPackage
class YourClass {
    def sayHello() {
        echo "Hello from YourClass"
    }
}
  1. 提交代码到存储库
    将代码提交到存储库并推送到git中。
  2. 加载共享库
    Jenkins Dashboard–>系统管理–>系统配置–>Global Pipeline Libraries在这里插入图片描述
    在 Jenkins pipeline 中加载共享库,如下所示:
@Library('your-library-name') _

其中, your-library-name 是你的共享库的名称。在这里, _ 是用于加载默认版本的共享库。
7. 调用共享库方法
在 Jenkinsfile 中调用共享库中的方法,如下所示:

yourFunction('John', 'Jane')
def yourClass = new yourPackage.YourClass()
yourClass.sayHello()

如果编写的代码是在vars目录下,使用的时候不需要实例化,如果编写在src目录下需要实例化
以上就是使用Groovy开发Jenkins Pipeline共享库的步骤。记得在开发和使用共享库时遵循最佳实践和安全措施,例如对代码进行测试、使用版本控制等。
7. 版本控制
在共享库开发过程中,建议使用版本控制工具(如Git)来管理代码的版本。在共享库的存储库中,创建一个或多个分支来管理开发、测试和发布不同版本的共享库。确保在每个版本中使用语义化版本控制规则(如1.0.0、1.1.0等),以便其他人能够轻松地识别不同版本的共享库。
8. 测试
与其他软件一样,共享库代码也需要进行测试。编写并运行单元测试、集成测试和端到端测试,以确保共享库代码的质量和可靠性。你可以使用Jenkins自带的测试框架,例如JUnit或Spock,或使用其他流行的测试框架,如JUnit、TestNG或Spock。
9. 共享库的发布和安装
将共享库发布到共享库管理器(如JFrog Artifactory、Sonatype Nexus等)中,以便其他用户可以安装和使用它。为共享库创建文档,包括如何安装、如何使用,以及示例用法。在发布共享库之前,确保共享库符合标准并已进行必要的测试。
10. 共享库的使用
其他用户可以在自己的Jenkinsfile中使用已发布的共享库。他们可以使用 @Library('your-library-name') 来加载共享库,并调用共享库中定义的函数或类。共享库管理器将自动从远程存储库中下载共享库代码,以便用户可以在Jenkins Pipeline中使用它。

jenkins实现CICD有哪几种触发策略

  • 手工
  • 自动定时(按照固定的周期,每天早上7点跑CICD)
  • 自动轮询检查代码仓库,有代码变更,触发CICD
  • webhook(勾子,将持续集成系统和代码仓库勾起来)
    • 进入代码仓库,找到webhooks功能,把jenkins中路径配置在webhooks中
    • 在这里插入图片描述在这里插入图片描述

使用插件为流水线增加构建信息

可以使用插件调用插件中的共享库信息。如增加构建信息,可以jenkins->系统管理->插件管理 搜索插件"description setter"安装插件,插件管理器会将插件下载到jenkins服务器上的系统文件中,并将其安装到jenkins实例中,需要增加构建信息按照如下格式,更改描述信息即可。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值