共计 2729 个字符,预计需要花费 7 分钟才能阅读完成。
说实话,对于共享库这种功能扩展的特性,刚开始没接触太多groovy语法的很多运维都会有点不知所措,包括博主自己。其最核心的因素就是groovy在jeknins中的各种使用方式。博主当时在用pipeline常用的语法完成任务时,也没想太多groovy的使用,开始:只会写pipeline块中的内容》在pipeline块上方中使用简单groovy变量》在pipeline块上写方法》抽离方法至共享库》花里胡哨大杂烩
从上一篇文章:Jenkins share-library共享库,可以看出共享库的作用,那么如何写自己的共享库?此篇文章,博主在这里简单介绍一点规范,避免其他运维新人踩坑。踩坑不要怕,踩坑得出来得经验更深刻。。。。
共享库目录结构
官方的结构如下:
(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:里面用来定义助类
- vars:定义可从流水线访问的全局变量的脚本
- resources:目录允许从外部库中使用
libraryResource
步骤来加载有关的非 Groovy 文件,一般用来放置其他类型文件,如json,yaml或其他ini配置文件等
创建第一个方法
未使用共享库时,在pipeline中用groovy定义方法
def sayHelloWorld(){
println("Hello Worldddddddddd")
}
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
script {
sayHelloWorld()
}
}
}
}
}
尝试把sayHelloWorld
函数提取到共享库src助类中
[root@jenkins-manager ops-share-library]# pwd
/usr/local/src/ops-share-library
[root@jenkins-manager ops-share-library]# tree
.
├── README.md
├── src
│ └── io
│ └── gitlab
│ └── devops
│ └── ws
│ └── saySomething.groovy
└── vars
[root@jenkins-manager ops-share-library]# cat src/io/gitea/devops/ws/saySomething.groovy
package io.gitlab.devops.ws;
def sayHelloWorld() {
println("Hello Worldddddddddd")
}
def sayHello(name) {
println("Hello, ${name}")
}
此时pipeline为
// 引入共享库
@Library('ops-share-library@main') _
// 调用src内的函数和方法,需要实例化
def saysomething = new io.gitlab.devops.ws.saySomething()
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Demo') {
steps {
script {
echo 'eeee'
saysomething.sayHelloWorld()
saysomething.sayHello("xadocker")
}
}
}
}
}
尝试把sayHelloWorld
函数提取到共享库中的vars中
[root@jenkins-manager ops-share-library]# pwd
/usr/local/src/ops-share-library
[root@jenkins-manager ops-share-library]# tree
.
├── README.md
├── src
│ └── io
│ └── gitlab
│ └── devops
│ └── ws
│ └── saySomething.groovy
└── vars
└── say.groovy
此时的pipeline:
// 引入共享库
@Library('ops-share-library@main') _
// 调用vars中方法不需要实例化,但是要实现call方法
// def saysomething = new io.gitlab.devops.ws.saySomething()
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Demo') {
steps {
script {
echo 'eeee'
// saysomething.sayHelloWorld()
// saysomething.sayHello("xadocker")
say()
say("xadocker")
}
}
}
}
}
在vars中调用src助类中的方法
[root@jenkins-manager ops-share-library]# cat src/io/gitea/devops/ws/myFunc.groovy
package io.gitlab.devops.ws;
def Func1() {
sh returnStdout: true, script: 'date +%Y%m%d%H%M%S'
}
[root@jenkins-manager ops-share-library]# cat vars/myfunc.groovy
import io.gitlab.devops.ws.myFunc;
def func1() {
new myFunc().Func1()
}
对应的pipeline如下
// 引入共享库
@Library('ops-share-library@main') _
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Demo') {
steps {
script {
echo 'eeee'
// saysomething.sayHelloWorld()
// saysomething.sayHello("xadocker")
// say()
// say("xadocker")
def t = myfunc.func1()
echo t
}
}
}
}
}
正文完