如何在JenkinsFile中获取流水线作业所在的文件夹名称?
获取Jenkins流水线所在文件夹名称并传递给下游作业
我来帮你解决这个问题!要在Jenkinsfile里获取流水线所在的文件夹名称,其实不用额外依赖Ownership插件(毕竟它的定位是管理归属信息,和文件夹路径无关),直接借助Jenkins内置的API就能实现,下面给你几种可行的方案:
方案1:基础版——直接获取父文件夹名称
利用currentBuild对象的project属性,它指向当前的流水线作业实例,而作业的parent属性就是它所在的文件夹对象,直接取name就能得到文件夹名称:
// 脚本式流水线直接写 def folderName = currentBuild.project.parent.name println "当前流水线所在文件夹: ${folderName}"
如果是声明式流水线,需要把这段代码放在script块中:
pipeline { agent any stages { stage('获取文件夹名称') { steps { script { def folderName = currentBuild.project.parent.name echo "当前流水线所在文件夹: ${folderName}" // 直接传递给下游自由风格作业 build job: '下游自由风格作业', parameters: [ string(name: 'FOLDER_NAME', value: folderName) ] } } } } }
方案2:鲁棒版——处理嵌套文件夹/根目录场景
如果你的流水线可能在多层嵌套文件夹里,或者直接在Jenkins根目录下运行,可以加个递归判断,确保拿到最上层的文件夹名称(或者返回“根目录”):
def getFolderName() { def project = currentBuild.project def parent = project.parent // 循环向上查找,直到找到Folder类型的父节点或者Jenkins根节点 while (parent.class.simpleName != 'Folder' && parent.class.simpleName != 'Jenkins') { parent = parent.parent } return parent.class.simpleName == 'Folder' ? parent.name : '根目录' } // 使用方法 def folderName = getFolderName() echo "所在文件夹: ${folderName}" // 传递给下游作业 build job: '下游自由风格作业', parameters: [ string(name: 'FOLDER_NAME', value: folderName) ]
下游作业配置说明
要接收这个变量,你的下游自由风格作业需要提前配置字符串参数,参数名称要和Jenkinsfile里的FOLDER_NAME一致,这样就能在下游作业中通过${FOLDER_NAME}引用该变量了。
内容的提问来源于stack exchange,提问作者Roseau
相关产品推荐
相关产品推荐

