首页 > 解决方案 > 源代码控制中的 Jenkinsfile 共享参数

问题描述

我是 jenkins 的新手,继承了一堆代码质量未知的声明性管道。每个管道都使用文件夹属性来设置共享的默认参数值。这将基本变量置于源代码控制之外,从而扼杀了我们的 PR 流程和调试历史。例如

    //pipelineA/Jenkinsfile
    pipeline {
        parameters {
            string name: 'important_variable', defaultValue: folderProperty('important_variable')
        }
        //etc
    }

    //pipelineB/Jenkinsfile
    pipeline {
        parameters {
            string name: 'important_variable', defaultValue: folderProperty('important_variable')
        }
        //etc
    }

然后在根文件夹中将属性important_variable设置为"Hello World"

有没有办法通过设置文件夹属性以从 yaml 中提取变量或使用共享库来将其纳入源代码管理?

感谢您的任何帮助!

标签: jenkinsjenkins-pipeline

解决方案


万一有人读到这个,我们结束了:

  1. 创建bootstrap.groovy文件
  2. 这个文件必须放在/vars你的 repo 绝对顶部的目录中
  3. 使用 Jenkins UI,我们进入管道的父目录 > config 并创建了一个共享库config-lib,称为指向我们的 repo 并自动公开bootstrap.groovy文件方法,只要文件在正确的位置
  4. bootstrap.groovy文件有一个call方法,它为我们的默认参数返回一个带有键值对的映射。这个方法必须命名call
  5. Jenkinsfile管道中,我们包括以下两行:
@Library("config-lib") _
config = bootstrap()
  • 库装饰器(注意它以 结尾_导入config-lib在 jenkins ui 中定义的方法

  • 引导函数从该库中的文件调用call方法bootstrap.groovyconfig-lib

  1. 在 Jenkinsfile 中使用config映射来填充参数默认值
pipeline {
    parameters {
        string name: 'foo', defaultValue: config.foo
    }

它已经完成了。

这个视频帮助很大:https ://youtu.be/Wj-weFEsTb0


推荐阅读