提问人:Pavel Soloviev 提问时间:11/16/2023 更新时间:11/16/2023 访问量:28
使用上下文感知更改修改多个 Jenkins 文件
Modifying multiple Jenkins files with context-aware changes
问:
我需要修改数十个 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
}
但它看起来不可读,所以我想知道是否有更好的解决方案。我正在考虑的解决方案类似于小补丁文件,但能够动态替换原始内容。
你能帮我找到如何存档目标的方法吗?
答: 暂无答案
评论