问题标签 [jenkins-shared-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1028 浏览

kubernetes - 使用 Kaniko 从 Kubernetes CloudBees Jenkins 共享库构建容器的问题

我正在尝试使用调用 Kaniko 的 Jenkins 共享库构建容器。Jenkins 是运行在 Kubernetes 集群上的 CloudBees 核心。

我更喜欢尝试使用 pod 模板来构建容器,但如果必须,我可以回退到专用 VM(但我的客户不会高兴)。

问题:从简单的Jenkinsfile管道运行 Kaniko 工作正常,但尝试从shared-library.

我的共享库的片段:

我得到的错误(剪断):

有没有其他人能够让 Kaniko 在 Kubernetes 上的 Jenkins 共享库中运行?

0 投票
1 回答
4841 浏览

jenkins-pipeline - 共享库“vars”文件夹结构 - 我可以添加子文件夹吗?

使用共享库扩展 - 目录结构我创建了一个共享库,其中我有多个 *.groovy 文件在 vars 文件夹中实现全局变量。

我可以将子文件夹添加到 vars 以更好地组织我的文件吗?我试过了,在使用全局变量时没有运气。我需要使用特定语法来引用子文件夹中的文件吗?还是不支持子文件夹?

0 投票
1 回答
410 浏览

jenkins - 如何将变量名而不是其值作为参数传递给 /var 函数?

我正在尝试划分管道。大多数参数都成功传递,但那些包含变量的参数在我需要之前就被解析了。

詹金斯版 2.164.1

}

在这里,我希望该版本将从重新定义的 VERSION 变量中获取,但 POSTBUILDACTION 作为字符串传递给函数。结果它被原样调用(“make.exe \some\path\file_temprorary-value”)。事实上我想得到的命令是(一些文件只包含一个数字,例如“5”)

但现在我有

或者,如果我试图通过 \${VERSION} 像:

- 按原样传输:

我试图在预构建阶段查看一个 POSTBUILDACTION 类 - 它等于“class org.codehaus.groovy.runtime.GStringImpl”,并且在传递 throw 后在构建阶段也相同 - 它变成了一个字符串:“class java.lang.String”

那么如何将包含变量的函数参数传递给函数,而不是它的值?或者将“呼吸生命”变成一根干燥的绳子,比如

所以变量可以解决吗?

0 投票
1 回答
2137 浏览

jenkins - Jenkins 共享库中未调用构造函数

我正在尝试开发共享库并具有以下目录结构

  • src/com/mycomapny
    • MyTest.groovy
  • 变量
    • test.groovy
  • 詹金斯文件

我的Jenkinsfile仅调用 test.groovy 中可用的方法并提供所需的输入。它导入 MyTest 并创建对象并调用构造函数,然后是执行MyTest.groovy文件中可用功能的实际方法

这里从未从全局 vars/test.groovy 调用构造函数类

我尝试从 groovy 调用类和方法,它工作正常,但是当我从 jenkinsfile 调用它时它不工作。我不知道为什么我不能调用构造函数以及我缺少什么。

我已将@NonCPS放在上面的 test.groovy 方法上,但它仍然无法正常工作。

在这里,我只想从 jenkins 文件中调用构造函数并在我的 vars/test.groovy 中打印输入值的值。

EDIT1:当我在方法“def nofity”上方使用@NonCPS 时,我的构建正在成功,但除了通知方法的第一行中的打印语句外,我什么也没得到。

如果我不使用@NonCPS,我会得到以下异常

0 投票
2 回答
492 浏览

jenkins - 尝试使用共享库并行触发所有作业

我想从另一个工作中触发詹金斯文件夹中的所有工作,为此我尝试编写詹金斯共享库并使用它。但是它会触发构建,然后失败并出现异常

我的共享库 runAllJobsInFolder.groovy:

========================================

在 Jenkins 工作中,我使用 runAllJobsInFolder "testfolder" 调用它

我想将触发作业的结果传播到主要作业

在工作日志中

在此处输入代码 在此处输入代码

0 投票
0 回答
972 浏览

jenkins - 如何避免 Jenkins 要求在受信任的共享管道中进行调用的进程内批准

TLDR;

如何以jenkins非交互方式进行配置,以便人们可以使用我的共享库,而无需我点击进程内脚本的批准按钮

很长的故事...

我在 Jenkins 中创建了一个共享库,看起来像这样(简化版):

这样用户就可以像这样调用我的库:

该库也在jenkins/configure下配置。

麻烦的是詹金斯总是要求签名的过程中脚本批准

签名:staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods invokeMethod java.lang.Object java.lang.String java.lang.Object

但是在文档中它说共享库应该是可信的:https ://jenkins.io/doc/book/pipeline/shared-libraries/#global-shared-libraries ...

这是我尝试过的:

1. 完全禁用进程内脚本审批

这似乎是不可能的:请参阅如何禁用 Jenkins 管道构建的安全检查并打开jenkins票证:https ://issues.jenkins-ci.org/browse/JENKINS-28178

2.使用Configuration As Code预先配置jenkins,允许这种特定方式

这目前还不可能......工作似乎已经基本准备就绪,但截至今天仍需要合并到 master 中:https ://github.com/jenkinsci/script-security-plugin/pull/250

3. 在 jenkins/scriptApproval 上 GET 和 POST

我使用浏览器调试器查看进行了哪些调用。页面上的 GET 为我提供了正确的 ID,然后一个 POST 就足够了,但是由于两个请求是分开发出的,ID 之间发生了变化,我收到了 404 错误...

会给:

4. 隐式加载库

我隐式加载库,并删除了

来自詹金斯文件。仍然需要批准。

没有想法

我完全没有想法。通常应该信任共享管道,所以我真的不明白为什么他仍然要求批准这些外部调用......或者我在我的共享库的实现中做错了什么?

0 投票
0 回答
1867 浏览

jenkins - 在管道中包括多个步骤作为外部文件

我正在尝试将我的管道拆分为多个文件,因此一个阶段内部有多个阶段,我想将其移动到vars我正在导入的 jenkins-shared-library 目录中的另一个文件中。

在里面utils-library我有一个名为的文件vars/externalNightlyStages.groovy及其内容:

所以理论上,在管道中调用这个库应该只是导入阶段并运行,就好像它们都在一个文件上一样。但是,这不起作用。

我尝试从不同的地方调用库,用script块环绕,用块环绕steps。什么都没有用。

有什么建议么?

0 投票
0 回答
556 浏览

jenkins - Jenkins 将触发块传递给共享库管道

我有一个共享库,其中包含一个声明性管道,许多作业都在使用它来构建。但是,我希望能够将触发器块从 Jenkinsfile 传递到共享库,因为我想通过 Cron 触发一些作业,其他一些我想通过 SNS 触发,以及其他具有上游作业触发器的作业。

有没有办法我可以做到这一点?我尝试过的一切都失败了

我努力了

失败了

还尝试将 cron 计划传递到共享库中,例如

但这给出了错误

已经尝试过各种其他的东西,但似乎声明式风格需要一个触发器块,里面只有触发器。

有谁知道实现我想要做的事情的方法?

0 投票
1 回答
1132 浏览

python - Jenkins 共享库:如何从包中包含的 python 模块运行代码?

我想运行一个 python 脚本作为从 github repo 触发的 jenkins 管道的一部分。如果我将脚本直接存储在存储库本身中,我就可以sh 'python path/to/my_package/script.py'完美地完成工作。但是,由于我想从多个 repos 的多个管道中使用它,所以我想把它放在 jenkins 共享库中。

我发现这个问题建议将python文件存储在resources目录中并在使用前将其复制到临时文件中。仅当脚本是一个独立文件时才有效。不幸的是,我的是一个包含多个 python 文件并在它们之间导入的包,所以这是不行的。我还尝试从this question的答案中复制包含python包的整个文件夹,这表明使用

但它给了我以下错误:

似乎需要一些额外的权限,我认为我无法获得(它是一台共享机器)。

所以?有谁知道我如何从 jenkins 共享库运行 python 包?目前我能想到的唯一解决方案是手动重新创建python包的目录结构,这显然非常混乱且不通用。

PS:没有特别的理由使用 python 脚本而不是在 groovy 中编写相同的脚本。只是python脚本经过了很好的测试、很好的理解和很好的支持。现在用 groovy 重写整个事情是不可行的。

0 投票
0 回答
615 浏览

jenkins - Jenkins 共享库:具有单个必需字符串参数的函数

我有一个用于项目特定 Jenkins 设置的共享库。

我的其中一个文件vars/gradle.groovy如下所示:

当我尝试从我的实际项目代码(声明性 Jenkinsfile)中调用它时,如下所示:

我收到以下错误:

任何想法我做错了什么?其他函数使用命名参数,它们开箱即用。

但在这种情况下,我更喜欢一个简单的String参数,以使方法的接口尽可能方便。

谢谢!