如何识别Jenkins中非Job-DSL任务?已有Python脚本列出全部任务
筛选Jenkins中的非Job-DSL任务
要从已有的Jenkins任务列表中筛选出非Job-DSL任务,核心是识别Job-DSL任务的特征,再反向排除即可。以下是具体实现方案:
Job-DSL任务的识别特征
Job-DSL创建的任务通常具备以下任一特征:
- 任务的
config.xml配置文件中包含<createdBy>JobDSL</createdBy>标签(这是最直接的标识,由Job-DSL自动添加) - 任务本身是执行Job-DSL脚本的任务,其构建步骤中包含
hudson.plugins.jobdsl.Builder类型的操作
基于Python脚本的筛选实现
假设你当前使用python-jenkins库获取任务列表,可直接在原有代码中加入筛选逻辑:
import jenkins from xml.etree import ElementTree as ET # 初始化Jenkins连接 server = jenkins.Jenkins('http://你的Jenkins地址', username='用户名', password='API令牌') # 获取所有任务列表 all_jobs = server.get_all_jobs() non_jobdsl_jobs = [] for job in all_jobs: job_name = job['name'] try: # 获取任务的配置XML config_xml = server.get_job_config(job_name) root = ET.fromstring(config_xml) # 检查是否是Job-DSL创建的任务 created_by = root.find('.//createdBy') is_created_by_jobdsl = created_by is not None and created_by.text.strip() == 'JobDSL' # 检查是否是执行Job-DSL脚本的任务 has_jobdsl_builder = root.find('.//hudson.plugins.jobdsl.Builder') is not None # 既不是Job-DSL创建,也不是执行Job-DSL的任务,即为目标任务 if not is_created_by_jobdsl and not has_jobdsl_builder: non_jobdsl_jobs.append(job_name) except Exception as e: print(f"获取任务 {job_name} 配置失败: {str(e)}") # 输出结果 print("非Job-DSL任务列表:") for job in non_jobdsl_jobs: print(f"- {job}")
注意事项
- 部分旧版本Jenkins中,
createdBy标签的内容可能是小写的jobdsl,需根据实际情况调整判断条件 - 若你未使用
python-jenkins库,而是通过requests直接调用API,逻辑完全一致:发送GET请求到http://你的Jenkins地址/job/{任务名}/config.xml,解析返回的XML内容即可 - 少数场景下,Job-DSL任务可能没有
createdBy标签,可额外检查任务描述中是否包含"Generated by Job DSL"这类标识文本
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

