我想使用共享库将多个环境变量注入到多个jenkinsfile中,因为env变量在这些多个jenkinsfile中是公用的。动机是在全局级别上注入属性,以便变量是全局的,并且可以在整个管道中访问。
我尝试了以下方法: 一种。在jenkinsfile中使用了环境标记。这需要在所有jenkinsfile中完成,因此没有代码可重用性。 b。我能够将env变量注入到阶段的script标签中。但是我想在管道代码开始之前完成。这就像可以从管道中的任何位置访问的全局属性一样。
代替以下内容:
// Jenkinsfile
pipeline {
environment {
TESTWORKSPACE="some_value"
BUILDWORKSPACE="some_value"
...
...
30+ such env properties
}
}
我正在寻找可以在共享库groovy脚本中声明这些env变量,然后在整个管道中对其进行访问的东西。如下所示:
// Jenkinsfile
def call(Map pipelineParams) {
pipeline {
<code>
<Use pipelineParams.TESTWORKSPACE as a variable anywhere in my pipeline>
}
}
答案 0 :(得分:0)
我认为这是可能的。也许您的jenkinsfile可能类似于:
@Library(value="my-shared-lib@master", changelog=false) _
import com.MyClass
def extendsEnv(env) {
def myClass = new MyClass()
myClass.getSharedVars().each { String key, String value ->
env[key] = value
}
}
pipeline {
...
stage('init') {
steps {
extendsEnv(env)
}
}
}
请注意,如果您打算以后将共享变量作为环境变量添加,则共享变量应为字符串值。但是我没有尝试这段代码。 您还可以想象另一个解决方案:分解所有团队的管道并使用参数覆盖系统(项目级别>团队离开>全球级别):
@Library(value="my-shared-lib@master", changelog=false) _
def projectConfig = [:]
projectConfig['RESOURCE_REQUEST_CPU'] = '2000m'
projectConfig['RESOURCE_LIMIT_MEMORY'] = '2000Mi'
teamPipeline(projectConfig)
teamPipeline函数是在vars目录的共享库中声明的,带有附加的teams参数,该参数最终调用带有参数映射的公用管道。如上所示,将这些参数设置为env var。