当前位置: 首页 > 知识库问答 >
问题:

如何从Jenkins共享库运行vars/script.groovy

慕容俭
2023-03-14

我试图从一个位于vars下的新脚本中获取信息,该脚本是从共享库Jenkins类调用的,但出错了。

>

  • 需要-全局配置文件。

    目标-能够在共享库中获取全局值,而无需从Jenkins文件发送参数。

    文件结构

    .
    ├── src
    │   └── org
    │       └── jenkins
    │            └──shared_library.groovy 
    │── vars
    │      └── globals.groovy
    │
    │── jenkinsfile.groovy
    

    变量/全局变量。棒极了

    def my_global() {
    return 'my_global_name'
    }
    

    shared_library类

    package src.org.jenkins
    
    class shared_library implements Serializable {
    private steps
    
    shared_library(steps) {
        this.steps = steps
    }
    
    def some_func(){
      println globals.my_global
    }
    

    詹金斯档案

    @Library 'shared_library'
    import org.jenkins.shared_library
    
    my_shared_library = new shared_library(steps)
    
    node(){
      stage('my_first_stage'){
        println globals.my_global
      }
      stage('my_second_stage'){
        println shared_library.some_func()
      }
    }
    

    因此,我可以看到管道中第一次打印的值,但对于第二次打印,我得到:

    类:src没有这样的属性:globals。组织。詹金斯。共享图书馆

  • 共有2个答案

    罗心思
    2023-03-14

    如果您对在中定义值感到满意。属性或。json文件您可以使用“资源”文件

    共享库/资源/global.properties

    在管道脚本或var/script中。棒极了

    使用库资源方法

    globalPropertyContent = libraryResource 'global.properties'
    

    访问属性值,如:

    globalPropertyContent.PROJECT_NAME
    
    丁灿
    2023-03-14

    您还需要使用steps对象来访问全局对象:

    def some_func(){
        println steps.globals.my_global()
    }
    

    以你为例,这将成为

    package src.org.jenkins
    
    class shared_library implements Serializable {
    private steps
    
    shared_library(steps) {
        this.steps = steps
    }
    
    def some_func(){
      println steps.globals.my_global()
    }
    

    编辑:刚刚看到你的Jenkins文件也有输入错误。需要使用共享库对象而不是“my_second_stage”中的类:

    @Library('shared_library')
    import org.jenkins.shared_library
    
    my_shared_library = new shared_library(steps)
    
    node(){
      stage('my_first_stage'){
        println globals.my_global()
      }
      stage('my_second_stage'){
        println my_shared_library.some_func()
      }
    }
    
     类似资料:
    • 问题内容: 我正在尝试为CI流程编写Jenkins共享库。我想引用在文件夹中定义的全局函数内的文件夹中的类,因为它可以使我将大多数逻辑放在类中,而不是在全局函数中。我正在遵循Jenkins官方文档中记录的存储库结构: Jenkins Shared Library结构 这是我所拥有的简化示例: /src/com/example/SrcClass.groovy /vars/classFromVars.

    • 问题内容: 注意到,创建一个可执行文件,我刚刚得到了奇怪的想法来检查时,我尝试运行它......好结果是发生了什么 段错误 我自己的库。因此,对此感到好奇,我试图“运行” glibc(在我的系统上)。果然,它没有崩溃,但是提供了一些输出: 所以我的问题是:这背后的魔力是什么?我不能只在库中定义符号-可以吗? 问题答案: 我写 了一篇 有关该主题的博客文章,在此我进行了更深入的介绍,因为我发现它很有

    • 问题内容: 谁能告诉我如何对共享库进行运行时调试? 我需要在运行时调试共享库中的一个函数,但另一个程序会调用它。如何使用共享库执行类似dbx的操作? 我在AIX上使用dbx。我想做的是gdb比dbx好吗? 问题答案: 您只需要使用可执行文件调用gdb(无论是您的文件还是第三方文件都没有关系)。这是一个示例,其中我调试 ls 命令并在(共享) c库中 设置断点。此示例使用了gdb 6.8,它支持延迟

    • 我的groovy脚本都在git存储库中,使用jenkins checkout SCM。其中一个groovy脚本中有一些常用函数,我想使这个groovy成为一个共享库,而无需打开jenkins并在jenkins管理表中添加共享库。 我可以使用RESTAPI或其他方法添加新库吗?

    • 我通过jenkins管道(共享库)运行此代码。 它在本地工作,但在Jenkins管道中,我得到以下错误: 请帮帮我

    • 我有一个名为“jenkins共享库”的jenkins共享库的存储库,现在我创建了一个名为“test”的新分支, 我有一个应用程序需要在jenkins文件中使用这个jenkins共享库,目前它被称为 我想在我的jenkins文件中使用我的jenkins共享库的这个特定测试分支,我如何使用jenkins共享库的特定分支???