美文网首页
jenkins共享库入门

jenkins共享库入门

作者: david161 | 来源:发表于2022-03-06 19:14 被阅读0次

    简介

    实际生产环境中,运维工程师经常使用 Jenkins Pipeline 一定会遇到多个不同流水线中有大量重复代码的情况,很多时候为了方便我们都是直接复制粘贴到不同的Jenkinsfile文件中,但是长期下去这些代码的维护就会越来越麻烦。为了解决这个问题,Jenkins 中提供了共享库的概念来解决重复代码的问题,我们只需要将公共部分提取出来,然后就可以在所有的 Pipeline 中引用这些共享库下面的代码了。

    什么是共享库

    共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的Groovy 简明教程。
    使用共享库一般只需要3个步骤即可:
    1)首先创建 Groovy 脚本,添加到 Git 仓库中
    2)然后在 Jenkins 中配置将共享库添加到 Jenkins 中来
    3)最后,在我们的流水线中导入需要使用的共享库:Jenkins老版本中使用@Library('your-shared- library') ,这样就可以使用共享库中的代码。新版本中 Library 'your-shared-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
    

    sayHello.groovy

    在工程中新建vars目录。
    idea设置:project structure->moudle->source,将vars目录标记为Sources目录。如果不标记为Sources目录,vars下不能创建*.groovy文件。
    在目录vars/sayHello.groovy新建groovy文件,文件内容如下:

    def call(String name = "laosiji") { 
        println("hello $name")
    }
    

    配置共享库

    jenkins工作台->系统管理->系统配置-> Global Pipeline Libraries
    image.png

    pipeline任务

    //引入SharedLibrary库 
    library "groovyhello" 
    pipeline { 
        agent { 
            label 'jenkinsagent-154' 
        }
        stages { 
             stage('Hello') { 
                 steps { 
                      echo 'Hello World' 
                      //通过groovy脚本名称直接调用 
                      sayHello "lagou" 
                 }
             }
         } 
    }
    

    测试pipeline任务

    点击->立即构建

    src目录测试

    src/com.lagou.hello.ansible.groov

    package com.lagou.hello
    
    def printMessage(){ 
          println("hello laosiji") 
    }
    

    Jenkinsfile文件

    @Library("groovyhello")_ 
    
    def build = new com.lagou.hello.ansible() 
    pipeline { 
        agent { 
            label 'jenkinsagent-154' 
        }
        stages { 
            stage('Hello') { 
                steps { 
                    echo 'Hello World'
                    sayHello "lagou" 
                    script{ 
                        build.printMessage() 
                    } 
                } 
            } 
        } 
    }
    

    相关文章

      网友评论

          本文标题:jenkins共享库入门

          本文链接:https://www.haomeiwen.com/subject/uimmrrtx.html