Jenkins读取YAML校验Compute账户所有者的流水线问题
问题解决思路与代码修正
原代码存在的问题
- 未过滤目标账户:遍历了所有类型的账户(包括storage、network),但需求只需要检查
compute类型的账户 - 检查逻辑错误:仅判断所有者是否等于
user1,忽略了允许的user2和user3,同时会误判其他类型账户的合法所有者
修正后的代码
def config = readYaml file: "filename.yaml" // 定义compute账户允许的所有者集合 def allowedComputeOwners = ["user1", "user2", "user3"] // 遍历所有账户,仅处理compute类型的账户 config.accounts.each { account -> // 获取账户类型(每个account是键值对,key为账户名,value为类型) def accountType = account.values().first() if (accountType == "compute") { // 筛选出不在允许列表内的所有者 def invalidOwners = account.owners.findAll { owner -> !allowedComputeOwners.contains(owner) } if (!invalidOwners.isEmpty()) { error("Terminating Pipeline... 发现非法所有者: ${invalidOwners.join(', ')}") } } } // 后续流水线步骤 echo "所有compute账户所有者校验通过,进入下一步"
代码说明
- 精准过滤目标:通过
account.values().first()提取账户类型,仅对compute类型账户执行校验逻辑 - 高效合法性判断:用集合存储允许的用户列表,借助
contains方法快速判断所有者是否合法 - 批量异常排查:一次性找出所有非法所有者并输出,便于定位问题
- 不干扰其他账户:非
compute类型的账户不触发校验,完全匹配需求
内容的提问来源于stack exchange,提问作者Mahmut Cuta
相关产品推荐
相关产品推荐

