# jjb_templates **Repository Path**: hdops/jjb_templates ## Basic Information - **Project Name**: jjb_templates - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-02-18 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jjb_templates > 海鼎 DevOps Jenkins Job Builder 模板库 > 最后更新:2026-07-03 --- ## 目录结构 ``` jjb_templates/ ├── 根级(~110 个模板) # 各业务操作模板 ├── 9999/ # 巡检/监控类模板(baas/dnet/mas/member/pay/soms) ├── ci/ # CI 构建模板(template/jdk/rumba/modify_k8s) ├── k8s/ # K8s 部署运维模板 ├── kubernetes/ # K8s ArgoCD 部署模板 ├── phoenix/ # Phoenix CRM 产品模板 ├── phoenix_docker/ # Phoenix CRM Docker 部署模板 └── pt/ # PT 产品线模板 ``` --- ## 模板分类 ### 通用 pipeline 模板(被其他 yml 引用) | 文件 | 模板 ID | 说明 | 备注 | |---|---|---|---| | `ci/template.yml` | `template_pipeline` | CI 构建通用模板 | **使用最广泛**,script-path 使用变量 `{jenkinsfile}` | | `template.yml` | `template_pipeline` | 通用 pipeline 模板(旧) | 与 ci/template.yml 基本一致,script-path 也用 `{jenkinsfile}` | | `template_crm.yml` | `template_pipeline_crm` | CRM 专用模板 | **缺少 `concurrent` 字段**,script-path 用 `jenkinsfile/{jenkinsfile}`(无 `Jenkinsfile.` 前缀) | | `erp_template.yml` | `erp_template_pipeline` | ERP 部署模板 | script-path 指向 `jenkinsfile/erp/` | | `erp_app_template.yml` | `erp_app_template_pipeline` | ERP 应用安装模板 | 含 Active Choices 联动参数 | ### 特定业务模板(独立使用) | 文件 | 模板 ID | 项目类型 | 说明 | |---|---|---|---| | `env_tpl.yml` | `env` | pipeline | 环境部署操作 | | `deploy_tpl.yml` | `deploy` | pipeline | 标准部署 | | `non_stop_service_deploy_*` | `non_stop_service_deploy_*` | pipeline | 不停服部署(dubbo/eureka/nginx/slb) | | `update_jenkins_jobs.yml` | `update_jenkins_jobs` | **freestyle** | 刷新 Jenkins job,非 pipeline 类型 | | `update_jenkins_jobs_timed.yml` | `update_jenkins_jobs_timed` | pipeline | 定时刷新 Jenkins job | | `erpdeploy_tpl.yml` | `erpdeploy` | pipeline | ERP 部署 | | `folder_tpl.yml` | `folder` | **folder** | Folder 类型模板 | --- ## ⚠️ 问题清单 ### P0: `concurrent` 字段隐性 bug 详见下方「concurrent 字段」章节,影响 **24 个模板文件**,所有引用这些模板的 job 实际都允许并发。 ### P1: 部分模板完全没有 `concurrent` 字段 以下模板**没有** `concurrent` 字段,默认走 Jenkins 允许并发的行为: ``` template_crm.yml # CRM 通用模板 jdk_tpl.yml # JDK CI 构建 erpdeploy_tpl.yml # ERP 部署 k8s/*.yml # K8s 子目录所有模板 kubernetes/*.yml # Kubernetes 子目录所有模板 phoenix/*.yml # Phoenix 大部分模板(Phoenix_nonstop_deploy 除外) phoenix_docker/*.yml # Phoenix Docker 模板 9999/*/*.yml # 所有巡检模板 pt/*.yaml # PT 产品线模板 ``` ### P2: `arthas_tool_tpl.yml` 模板 ID 重复 同一个文件中定义了两次 `id: arthas_tool`(第 2 行和第 56 行),内容完全相同。JJB 只会使用最后一个定义,第 1-54 行是死代码。 ### P3: `script-path` 命名不统一 | 模式 | 示例 | 使用范围 | |---|---|---| | `jenkinsfile/Jenkinsfile.{name}` | `jenkinsfile/Jenkinsfile.deploy` | 大部分模板 | | `jenkinsfile/ci/Jenkinsfile.{name}` | CI 模板流 | ci/template.yml 等 | | `jenkinsfile/{name}` | `jenkinsfile/phoenix_deploy` | **仅 template_crm.yml**,缺 `Jenkinsfile.` 前缀 | | `jenkinsfile/k8s/{name}.jenkinsfile` | `jenkinsfile/k8s/deploy.jenkinsfile` | k8s 子目录,用 `.jenkinsfile` 扩展名 | | `jenkinsfile/pt/{name}.jenkinsfile` | `jenkinsfile/pt/ptAutoTools.jenkinsfile` | pt 子目录,用 `.jenkinsfile` 扩展名 | | `jenkins/Rumba/Jenkinsfile.{name}` | `jenkins/Rumba/` | **仅 ci/rumba.yml**,路径前缀不同 | ### P4: 构建保留天数不统一 | 模板/目录 | `num_to_keep` | `days_to_keep` | |---|---|---| | `ci/template.yml` | 3 | 10 | | 大部分模板 | 10 | 7/15/20 不等 | | `k8s/` | 30 | 10 | | `update_jenkins_*.yml` | 10 | 3/7 不等 | | PHX-JDK-release | 50 | - | 没有统一的保留策略标准,部分模板默认保留过少(CI 模板仅 3 个构建)。 ### P5: `retry-count` 不统一 仅 4 个模板定义了 `retry-count: 3`:`ci/template.yml`、`ci/jdk_tpl.yml`、`ci/rumba.yml`、`update_jenkins_jobs.yml`。其余模板无重试机制。 ### P6: `disabled` 硬编码 true 的模板 以下 healthcheck 模板硬编码了 `disabled: true`,不会对调用方暴露 `disabled` 参数,灵活性受限: ``` phoenix/healthcheck_tpl.yml phoenix/healthcheck_auto_restart_tpl.yml phoenix_docker/healthcheck_tpl.yml phoenix_docker/healthcheck_auto_restart_tpl.yml ``` ### P7: Phoenix 与 phoenix_docker 目录部分重复 两个目录中存在同名模板(如 `Phoenix_deploy_tpl.yml`),ID 相同但 script-path 不同(指向 phoenix_docker 下的 Jenkinsfile)。phoenix 目录下的模板实际也指向 `jenkinsfile/phoenix_docker/`,混淆。 --- ## ⚠️ `concurrent` 字段的隐性 bug ### 问题 JJB 4.1.0 的模板中 `concurrent: '{concurrent|false}'` 写法**实际会让生成的 Pipeline job 允许并发执行**。 ### 根因 JJB `general.py` 中对 `disabled` 和 `concurrent` 两个布尔字段的处理逻辑不一致: | 字段 | 源码位置 | 处理方式 | 对字符串 `'false'` 的结果 | |---|---|---|---| | `disabled` | `general.py:141-143` | `str(value).lower()` | → `'false'` 文本 → **正确** | | `concurrent` | `general.py:164-166` | `if not value:` truthy 判断 | → `bool('false')` = `True` → **错误** | `{concurrent|false}` 经过 JJB strformat 后结果是**字符串 `'false'`**。Python 中非空字符串 `'false'` 是 truthy,所以 `if not 'false':` 条件为 False,不会添加 `DisableConcurrentBuildsJobProperty`,Pipeline job 走 Jenkins 默认行为(允许并发)。 ### 修复方案 将模板中的 `'{concurrent|false}'` 改为 YAML 字面量布尔值 `false`: ```yaml # 错误写法 concurrent: '{concurrent|false}' # 正确写法 concurrent: false ``` `disabled: '{disabled|false}'` 不需要改。 ### 影响范围(24 个文件) ``` ci/template.yml template.yml template_crm.yml # 没有此字段,但也受影响 erp_template.yml erp_app_template.yml iwms_template.yml db_upgrade_tpl.yml deploy_blue_green_tpl.yml deploy_prometheus.yml deploy_rdb_tpl.yml deploy_tpl.yml get_cloud_info.yml jenkins_proxy_tpl.yml ldap_proxy_whiteip_tpl.yml non_stop_service_deploy_dubbo_tpl.yml non_stop_service_deploy_eureka_tpl.yml non_stop_service_deploy_nginx_tpl.yml non_stop_service_deploy_nginx_dubbo_tpl.yml non_stop_service_deploy_slb_tpl.yml phoenix/Phoenix_nonstop_deploy_tpl.yml pt_online_sql_file_vpc_tpl.yml rumba_oss_tools.yml update_jenkins_jobs.yml update_jenkins_specified_jobs.yml ``` **已正确使用 `concurrent: false` 的模板**(参考示例): ``` update_jenkins_config_timed.yml update_jenkins_jobs1.yml update_jenkins_jobs_timed.yml ``` --- ## 模板通用结构说明 大多数 pipeline 模板遵循以下结构: ```yaml job-template: id: <模板唯一 ID> name: '{job_name}' # job 名称,调用方必传 project-type: pipeline # pipeline 或 freestyle description: '{description|默认描述}' disabled: '{disabled|false}' # 是否禁用,可用但 strformat 写法可保留 concurrent: false # 应改为 YAML 字面量(推荐) # ... properties, parameters, triggers ... sandbox: true pipeline-scm: scm: - git: url: '{git_server_base_url|https://...}/hdops/jenkins_builder.git' branches: "{git_branches}" credentials-id: "{credentials_id|17643215-...}" shallow-clone: true script-path: jenkinsfile/<子目录>/Jenkinsfile.<名称> lightweight-checkout: true ``` ### 调用方式 ```yaml - project: name: 项目名 concurrent: false # project 级别覆盖(仅当模板用字面量时生效) jobs: - <模板ID>: job_name: '{folder}/job-name' jenkinsfile: some_build # 仅 template_pipeline 类需要 env_vars: | key1=value1 key2=value2 ```