使用上下文感知更改修改多个 Jenkins 文件

Modifying multiple Jenkins files with context-aware changes

提问人:Pavel Soloviev 提问时间:11/16/2023 更新时间:11/16/2023 访问量:28

问:

我需要修改数十个 Jenkins 文件,更改每个文件中的类似行。但应考虑上下文。目标是从旧的函数调用格式迁移到新的函数调用格式,并添加必要的环境变量和导入。

例如,在环境块中添加行:groovy PROJECT = ${project_name}

def project_name = "some_project_name"
pipeline {
    environment {
        SOME_ENV = true
        OTHER_ENV = "hello"
    }
...

或者更复杂的操作:

script {
    def dockerImage = docker.build("${project_name}:${env.BRANCH_NAME}-${env.BUILD_NUMBER}", "-f Dockerfile .")
    dockerImage.push("${env.BRANCH_NAME}-${env.BUILD_NUMBER}")
}

我想将其转换为

script {
    dockerBuildx.multiArch("$PROJECT", "-f Dockerfile .")
        .addTag("${env.BRANCH_NAME}-${env.BUILD_NUMBER}")
        .push()
}

以前我是手工完成的,但我想自动化这个过程。

我一直在寻找时髦的解析器,但我需要以某种方式将 AST 保存回 Jenkins 文件。此外,最好保留原始格式,以使代码审查更容易。

我想到的最直接的解决方案是每次替换都使用正则表达式。

这是golang中带有正则表达式的小函数,用于在块中添加新的环境变量:

func add_project_name(source string) (string) {
    pattern := regexp.MustCompile(`(environment\s*{[^}]*)`)
    newLine := `PROJECT = "hello"`
    result := pattern.ReplaceAllString(source, "$1    "+newLine+"\n    ")
  return result
}

但它看起来不可读,所以我想知道是否有更好的解决方案。我正在考虑的解决方案类似于小补丁文件,但能够动态替换原始内容。

你能帮我找到如何存档目标的方法吗?

正则表达式 解析 groovy Jenkins-pipeline

评论


答: 暂无答案