def load(path) {
env.CONFIGURATION = readJSON(file: path)
}
所以CONFIGURATION是一个环境变量,因此它是全局变量。问题在于,环境变量似乎只能是字符串,因此JSON已损坏(例如,我们无法执行
config.json
)我们还在Jenkinsfile中尝试了以下操作: >
def CONFIG = readJSON(file: path)
,但是CONFIG在库脚本中不可见。正确?将所有通用配置放在一个文件中,然后
将其加载以供库脚本查看。
如果不正确,您将如何处理我们的问题?只需
在每次调用时将config作为参数传递就可以了?
预先感谢您的帮助。
#1 楼
您应该查看全局共享库,这将允许您在不同的Jenkins文件之间重用逻辑。而不是依赖于环境,显式传递参数并从函数返回值可能更安全,使他们的行为更加明确。另一个好处是您可以使用
对它们进行单元测试
#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
评论
感谢您的回复!实际上,我们已经在开发共享库。我们可以使用Global的,但是我们的Jenkins由其他团队管理,并且其中涉及很多开发团队,这些不需要我们的库:(因此,我们动态加载它们。我们一定会尝试该单元测试框架关于配置,如果找不到其他解决方案,我们将尝试该方法。再次感谢!
–亚当·巴雷罗(Adam Barreiro)
17年7月7日在6:45