Jenkins share-library共享库尝试

723次阅读
没有评论

共计 2729 个字符,预计需要花费 7 分钟才能阅读完成。

Jenkins share-library共享库尝试

    说实话,对于共享库这种功能扩展的特性,刚开始没接触太多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
                    }
                }
            }
        }
    }

    正文完
     
    xadocker
    版权声明:本站原创文章,由 xadocker 2020-08-25发表,共计2729字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    评论(没有评论)