【问题标题】:Using global shared libraries in Jenkins to define parameter options在 Jenkins 中使用全局共享库来定义参数选项
【发布时间】:2020-10-15 00:26:57
【问题描述】:

我正在尝试使用我在共享库中定义的全局类来帮助组织作业参数。它不起作用,我什至不确定它是否可能。

我的工作是这样的:

pipelineJob('My-Job') {
    definition {
        // Job definition goes here
    }
    parameters {
        choiceParam('awsAccount', awsAccount.ALL)
    }
}

在 /vars/awsAccount.groovy 的文件中,我有以下代码:

class awsAccount implements Serializable {
    final String SANDPIT = "sandpit",
    final String DEV = "dev",
    final String PROD = "prod"

    static String[] ALL = [SANDPIT, DEV, PROD]
}

全局管道库配置为从我的存储库的主分支隐式加载。

尝试更新 DSL 脚本时,我收到错误消息:

错误:(myJob.groovy,第 67 行)没有此类属性:awsAccount 类:javaposse.jobdsl.dsl.helpers.BuildParametersContext

为什么找不到类,甚至可以在管道作业中使用这样的共享库类吗?

【问题讨论】:

  • pipeline {...之前尝试def my_options = awsAccount.ALL
  • 对不起,有同样的问题。似乎管道脚本无法访问共享库中的类

标签: jenkins jenkins-pipeline jenkins-groovy


【解决方案1】:

免责声明:我知道它可以使用 Jenkinsfile。不幸的是,没有使用声明式管道进行测试 - 但还没有答案,所以可能值得一试

关于您的第一个问题:无法找到您的共享库中的类有一些原因。从库导入、库语法等开始。但它们绝对适用于 DSL。更准确地说,额外的信息会很棒。但请确保:

关于您的第二个问题(命名此 SO 问题的问题):是的,您可以在共享库中包含来自信息的参数作业。至少,使用 Jenkinsfiles。您甚至可以定义要包含在管道中的属性。由于不同的问题,我让它使用了一个棘手的语法。

我再次使用 Jenkinsfile,这对我有用:

  1. 在我的 shared-lib 类中,我添加了一个静态函数来引入构建参数。注意函数需要的输入参数及其用法:
class awsAccount implements Serializable {
  //
  static giveMeParameters (script) {
    return [
      // Some parms
      script.string(defaultValue: '', description: 'A default parameter', name: 'textParm'),
      script.booleanParam(defaultValue: false, description: 'If set to True, do whatever you need - otherwise, do not do it', name: 'boolOption'),
    ]
  }
}
  1. 要在管道中引入这些参数,您需要将函数的返回值放入参数数组中
properties (
  parameters (
    awsAccount.giveMeParameters (this)
  )

再次,请注意调用函数时的语法。与此类似,您还可以在共享库中定义返回属性并在多个作业中使用它们的函数(disableConcurrentBuildsbuildDiscarder 等)

【讨论】:

  • 谢谢 Jose,看起来很有希望。我试试看。
猜你喜欢
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多