我有以下Groovy脚本作为Jenkins管道的一部分
权限。棒极了
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
def get_job_permissions(PermissionType permission) {
...
}
return this
作为Jenkins管道的一部分,我将这个文件加载到另一个Groovy文件中,并调用get_job_permissions作为参数通过其中一个枚举。
pipeline.groovy
def job_permissions = load 'permissions.groovy'
job_permissions.get_job_permissions(job_permissions.PermissionType.AUTHENTICATED)
Jenkins在这方面失败,并出现以下错误(我已经验证了在本例中'Script3'是使用enum参数获取_job_权限的调用)。
groovy.lang.MissingPropertyException: No such property: PermissionType for class: Script3
我知道脚本加载和调用是正确的,因为我可以将get_job_permissions的签名更改为以下内容,通过管道中的随机字符串传递。groovy和调用正确通过。
def get_job_permissions(def permission) {
...
}
如果我不更改签名,并且仍然传递一个随机字符串,Jenkins将失败构建,因为它找不到它认为我正在调用的方法(这是真的,它不在那里,它需要PermissionType)。
我尝试了许多不同的方法来向调用脚本公开PermissionType
这些解决方案都不允许我引用调用脚本中的枚举类型,我理解这是因为我试图通过脚本的实例引用它来访问类型。
但是如果我不能这样做,最好的方法是什么?
谢谢
我更喜欢使用:
髓鞘类。groovy:
package cl.mypackage.utils
class MyEnumClass {
static enum MyEnum {
FOO, BAR, QWERTY
}
}
如何使用:
import cl.mypackage.utils.MyEnumClass
def in_some_place() {
def fooEnum = MyEnumClass.MyEnum.FOO
}
当做
我最近遇到了这个问题,并找到了一个不同的解决方案,看起来不那么麻烦。
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
def get_job_permissions(PermissionType permission) {
...
}
// Do this before you return out to make the enum available as well
this.PermissionType = PermissionType
return this
我设法让一些东西发挥作用——我当然知道这可能不是正确的,甚至不是好的,但它为我打开了障碍,给了我所需要的。
而不是像通常那样在脚本中定义枚举
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
我创建了一个包含枚举的类,其成员变量初始化为枚举中的值。
权限。棒极了
public class PermissionTypes {
public enum Values {
ANONYMOUS,
AUTHENTICATED
}
public final PermissionTypes.Values ANONYMOUS = PermissionTypes.Values.ANONYMOUS
public final PermissionTypes.Values AUTHENTICATED = PermissionTypes.Values.AUTHENTICATED
}
@Field final PermissionTypes Permissions = new PermissionTypes()
然后,我可以在脚本中公开该类的实例,将其作为常规加载,并最终访问枚举值。
pipeline.groovy
def job_permissions = load 'permissions.groovy'
job_permissions.get_job_permissions(job_permissions.Permissions.AUTHENTICATED)
我想我们都同意这有点疯狂,但它给了我所需要的。
我对此仅有的问题(我现在可以接受)
我仍然很想知道正确的方法:)
根据Andrew Bayer的说法,您不应该向其他人注入声明性管道。将来可能会有人支持它,但可能不会。 我目前正在尝试在管道中启动一个管道,但我想知道我需要做什么才能使它工作。jenkins网页上的文档说明,如果新作业或管道与第一个作业或管道位于同一文件夹中,则可以从直接名称或绝对路径调用它。我已经尝试了所有不同的方法,目前我正在尝试一个文件的绝对路径,我刚刚检查过它一秒钟前存在,但它说它不存在。
我目前正在尝试从jenkins管道中的文件加载一个自定义groovy类。我尝试了这里提出的解决方案: 如何在Jenkins管道中导入类文件? 作为... JenkinsPipelineUtilityClass.groovy 詹金斯档案 并尝试同样使用GroovyClassLoader(再次使用上述类) 詹金斯档案 我在这两方面都遇到了同样的错误: 我已经检查了正在进行的脚本批准,里面什么都没有,我
问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了
关于Jenkins管道和Groovy方法,我这里有两个问题。首先,我有多个共享公共方法的构建,所以我认为最好将所有这些都放在一个类中,然后为每个构建导入文件。 Groovy脚本中的一段代码如下所示 在我的管道脚本中,我有 我遇到的第一个问题是如何在我的方法中使用,其次,当我收到错误时,如何在我的脚本中使用 哈德逊。远程处理。ProxyException:groovy。lang.MissingMet
我对Jenkins pipeline非常陌生,我正在Groovy中构建一个小型共享库<在这种情况下,我试图提出一些单元测试,然后我必须模拟管道对象。 基本上,我有一个Groovy类,其中包含一个方法,该方法使用凭据执行一些操作: 因此,当谈到这个方法的单元测试时,我创建了一个PipelineMock Groovy类来(尝试)用凭据和用户名密码模拟
所以我正在尝试为几个不同的项目制作一个多分支管道。 这些是基本要求: < li >每个客户有三项工作开发、准备和生产 < li >对于每个作业,从每个回购中提取相应的分支,并构建一个bot < li >如果作业正在使用的存储库中发生任何变化,则触发该环境的构建 所以这些要求非常简单。 但是还有第四个要求。我想弄清楚的是,我是否可以有一个回购,它可以保存我所有的Jenkins文件,然后构建另一个回购