我正在使用jobDSL插件来允许我和我的团队在我们的Jenkins设置中使用基础设施即代码原则。我们在脚本中定义了一堆作业,但其中大部分共享一些元数据,例如,几乎所有的作业都包含我们的开发团队可以部署的可用环境列表,例如:
environments = [
'Development',
'Test',
'Production'
]
字符串
我希望能够定义这个列表一次,然后将其导入到每个jobDSL脚本中,这样我们就不会重复20多次,每次有变化时都要修改20多次列表。我希望我可以使用我们的jenkins共享库来做到这一点,在文件的顶部设置@Library('our-shared-library') _
,但当我运行我们的种子作业时,我得到了一个unable to resolve class Library , unable to find class for annotation
错误,所以看起来共享库不能导入到jobDSL脚本文件中。
有没有其他方法可以将数据或类放在一个集中的位置/存储库中,并导入到所有的jobDSL脚本文件中?
我认为最理想的方法是将共享的元数据存储在存储所有jobDSL文件的repo中的文件中,但是如果它们需要存储在其他地方并导入,我也很乐意使用这种方法。
编辑1:有关jobDSL插件是什么以及它如何在Jenkins中启用IaC原则的更多信息,您可以将this question视为品尝者。我有大量作业,其中许多作业使用相同的数据,例如,我们的团队可以部署到的环境列表。我想定义这个列表1次,然后以某种方式将其拉到我的pipelineJob定义中。我试图导入我们的jenkins-共享库使用@Library('ourLibrary')
注解,但我认为这是不可能的。
Here is the Github page for the plugin.的
编辑2:我将尝试重新措辞这个问题,现在我已经喝了早上的咖啡,只是写得更好。我正在使用jobDSL插件以IaC格式定义我的Jenkins作业。我现在有20多个作业,一些数据在多个作业中重复,例如,我有一些工作需要一个环境列表作为参数供用户选择。我想定义这个列表一次,只定义一次,然后将该列表导入到需要该列表的文件中。
这里是一个示例jobDSL脚本(这是我有20多个文件,有一些差异)
def SERVICES = [
'Service-1',
'Service-2
]
def ENVIRONMENTS = [
'Development',
'Testing',
'Production'
]
for (SVC in SERVICES) {
SVC_NAME = SVC.replaceAll('-', ' ')
SVC_PATH = SVC.replaceAll('-', '_')
pipelineJob("DEPLOY/${SVC_NAME}") {
displayName("DEPLOY ${SVC_NAME.toUpperCase()}")
parameters {
choiceParam('ENVIRONMENT', ENVIRONMENTS, 'Select the environment to deploy to')
}
logRotator {
numToKeep(30)
}
definition {
cpsScm {
scm {
git {
remote {
...
}
}
scriptPath('deploy/Jenkinsfile_deploy_services.groovy')
}
}
}
}
型
现在我想在某个地方定义ENVIRONMENTS
列表,然后将其导入到我所有的20多个文件中,而不是在每个文件的顶部定义它,使我的repo更加干净和可维护。
1条答案
按热度按时间snvhrwxg1#
对我来说,这也是很难找到任何方式导入符号到我的工作,我想出了以下(对我来说仍然不满意)的方法:
想象一下,在你的脚本管道中导入任何一个带有所有符号的库,其中一个符号是exg.:“globals”(vars/globals.groovy)。此外,每个人都知道jobDSL语句,它可以在任何脚本管道中使用:
字符串
你可以在这里发现globals是通过addtionalParameters传递的,现在看看globals和prm是如何在job-tool.groovy中使用的:
型