现在,我们有许多项目与Jenkinsfile相似。我们不是在复制粘贴,而是在开发一些实用程序的共享库。该库在每个Jenkins文件中动态加载,并具有一些在调用之间重复的参数。例如,一个实用程序具有自定义的Slack消息发布功能,并且通道,机器人令牌和一些固定文本始终相同。已经考虑过制作一个配置文件,并在开始时使用所有这些“常量”参数将其全局加载。 >
def load(path) {
    env.CONFIGURATION =  readJSON(file: path)
}


所以CONFIGURATION是一个环境变量,因此它是全局变量。问题在于,环境变量似乎只能是字符串,因此JSON已损坏(例如,我们无法执行config.json

我们还在Jenkinsfile中尝试了以下操作: >
def CONFIG = readJSON(file: path)


,但是CONFIG在库脚本中不可见。正确?将所有通用配置放在一个文件中,然后
将其加载以供库脚本查看。
如果不正确,您将如何处理我们的问题?只需
在每次调用时将config作为参数传递就可以了?

预先感谢您的帮助。

#1 楼

您应该查看全局共享库,这将允许您在不同的Jenkins文件之间重用逻辑。

而不是依赖于环境,显式传递参数并从函数返回值可能更安全,使他们的行为更加明确。另一个好处是您可以使用
对它们进行单元测试

评论


感谢您的回复!实际上,我们已经在开发共享库。我们可以使用Global的,但是我们的Jenkins由其他团队管理,并且其中涉及很多开发团队,这些不需要我们的库:(因此,我们动态加载它们。我们一定会尝试该单元测试框架关于配置,如果找不到其他解决方案,我们将尝试该方法。再次感谢!

–亚当·巴雷罗(Adam Barreiro)
17年7月7日在6:45

#2 楼

我也有相同的想法(不同管道的不同配置文件)。
我使用pipeline.properties存储我的变量。

properties = readProperties file: 'pipeline.properties'
echo "Immediate one ${properties.repo}"


缺点:
由于常见的早期评估问题。在某些共享库关闭中使用$ {properties.repo}时,该值将为null(例如,agent {label $ properties.agentLabel},agentLabel将为null)。

请参阅:
https://stackoverflow.com/questions/46630168/in-a-declarative-jenkins-pipeline-can-i-set-the-agent-label-dynamically

http:// jenkins-ci.361315.n4.nabble.com/can-i-use-variable-to-specify-the-agent-label-in-my-clarification-pipeline-td4897177.html