【问题标题】:How to inject environment variables in jenkinsfile using shared libraries before beginning the pipeline code?如何在开始管道代码之前使用共享库在 jenkinsfile 中注入环境变量?
【发布时间】:2019-08-28 04:24:48
【问题描述】:

我想使用共享库将多个环境变量注入多个 jenkinsfile,因为 env 变量在这些多个 jenkinsfile 中是通用的。 Motive 是在全局级别注入属性,以便变量是全局的并且可以在整个管道中访问。

我尝试了以下方法: 一种。在 jenkinsfile 中使用环境标签。这需要在所有 jenkinsfile 中完成,因此没有代码可重用性。 湾。我能够在阶段的脚本标签内注入环境变量。但我想在管道代码开始之前做。这就像可以从管道中的任何位置访问的全局属性。

而不是下面的:

//Jenkins文件

pipeline {
environment {
TESTWORKSPACE="some_value"
BUILDWORKSPACE="some_value"
...
...
30+ such env properties
}
}

我正在寻找可以在共享库 groovy 脚本中声明这些环境变量的东西,然后在整个管道中访问它。如下所示:

//Jenkins文件

def call(Map pipelineParams) {

pipeline {
<code>
<Use pipelineParams.TESTWORKSPACE as a variable anywhere in my pipeline>
}
}

【问题讨论】:

  • 您找到解决方案了吗?我有同样的问题,还没有想出如何解决这个问题

标签: environment-variables jenkins-pipeline shared-libraries jenkins-groovy jenkins-declarative-pipeline


【解决方案1】:

我认为这是可能的。也许你的 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 目录的共享库中声明,带有额外的团队参数,最终调用带有参数映射的公共管道。您将这些参数设置为 env var,如上所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多