You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:02:21