一、一个让我至今难忘的凌晨三点
2023年11月,我接到一个紧急电话。电话那头的运维负责人声音沙哑:“Jira迁移完了,所有自定义字段全废了。不是丢了一两个,是几百个字段集体消失。我们试了重建索引、清了缓存、甚至回滚了一次数据,没用。现在整个研发团队停摆,你觉得还能救吗?”
我问了他一个反常识的问题:“你的迁移脚本是不是只搬了数据表,没搬配置表?”电话那头沉默了大概十几秒,然后他说了一句让我记到现在的话:“我们以为Jira迁移就是搬数据库,跟搬MySQL一样简单。”
这不是孤例。过去三年,我经手过17次Jira迁移的故障排查,其中11次涉及自定义字段大面积异常。而90%的根因,都不在数据本身,而在配置层。这篇文章,我就把这个“凌晨三点”的诊断逻辑完整拆解出来。如果你正在计划Jira迁移,或者已经踩了坑,我希望它能帮你省下至少48小时的无效排查时间。

二、核心结论:字段消失不是“丢了”,而是“迷路了”
先说清楚一个关键认知:迁移后自定义字段“全废了”,99%不是数据丢失,而是字段在数据库里好端端地躺着,但Jira的“寻址系统”坏了。
Jira的自定义字段不是一张扁平表,而是一套五层嵌套结构。字段的存在与否,取决于它能不能被正确“引用”。我把这套结构称为“字段的五重门”:
- 字段本体(customfield表):定义了字段ID、名称、类型。这是最基础层。
- 字段上下文(fieldconfiguration表):决定了这个字段在哪些项目、哪些问题类型里“存在”。最关键的隐含层,也是迁移中出错率最高的地方。
- 界面方案(fieldlayoutscheme + fieldlayout表):决定了字段在创建/编辑页面上出现在哪个位置。如果你习惯用插件调界面,迁移后这里往往一片空白。
- 工作流绑定(workflowschemeentity表):部分字段的可见性受工作流步骤控制。迁移后工作流断掉,字段也跟着隐退。
- 权限方案(permissionscheme表):某些字段被设为“仅特定角色可见”。权限方案引用了旧环境的角色ID,新环境里这些ID已经不存在。
这五层,任何一层断了,你的字段就会在某一个或所有界面里彻底消失。而大多数迁移工具,包括Atlassian官方的Jira Cloud Migration Assistant,对这五层的处理都有盲区。尤其是字段上下文,它经常被当作“元数据”忽略掉,迁移工具只搬了字段定义,忘了告诉新环境“这些字段该给谁用”。
1. 为什么“字段上下文”是最大的坑
我跟团队做了一个排查实验:在Jira Server(v8.20)里创建30个自定义字段,分配给3个不同项目和5种问题类型。然后使用Jira Cloud Migration Assistant迁移到Cloud版。结果是:30个字段全部出现在管理后台的“自定义字段”列表里,但只有12个能在创建问题时正常显示。剩下的18个,字段上下文全部丢失,它们变成了幽灵字段,你能在数据库和管理后台看到它,但用户永远见不到它。
这正是“全废了”的典型表现。管理后台的字段列表看着一切正常,你甚至能看到每个字段的类型和描述。但一到项目里创建问题时,界面空空如也。很多人第一反应是去查权限,耽误了大把时间。

三、真实场景还原:我见过最离谱的三种“全废了”
讲三个真实的抢救案例,每一个都代表一类典型的迁移“翻车”路径。你很大概率正在经历其中一种。
1. 服务器物理迁移后的“集体隐身”
企业背景:一家200人规模的金融科技公司,将Jira从自建机房迁移到阿里云ECS。数据库完整备份后恢复至新环境,启动Jira后发现所有自定义字段在新建问题时不可见。管理后台字段列表正常,索引重建后无改善。
根因定位:他们的DBA用mysqldump全量导出导入,数据库数据完整。但Jira启动时,插件目录(/opt/atlassian/jira/atlassian-jira/WEB-INF/lib)下的字段相关插件版本不一致。旧环境里安装过两个自定义字段增强插件(一个用来做级联下拉,一个用来做字段公式计算),新环境里这两个插件没有迁移过来。Jira扫描不到插件,直接把这些字段标记为“不可识别”,界面层不再渲染。
这个问题根本不在于数据库,而在于插件依赖链断裂。但大多数排查路径从一开始就瞄着数据库去了。
核心经验:迁移前一定要导出完整的插件清单,包含版本号。如果有自定义字段依赖特定插件,迁移后必须先安装这些插件,再启动Jira。
2. 从Server到Cloud的“静默失效”
企业背景:一家350人的SaaS企业,使用Jira Cloud Migration Assistant从Server迁往Cloud。迁移报告显示“100%成功”,但研发团队发现约60%的自定义字段在Cloud端无法使用。
根因定位:Server端有大量字段使用了自定义的字段上下文(Field Context),通过“上下文”把同一字段在不同项目里配了不同的默认值和选项。迁移助手在处理这些多上下文字段时,只保留了默认上下文,其余上下文全部丢弃。结果是:字段本身还在,但关联到特定项目和问题类型的配置全部消失。
这个问题最隐蔽的地方是:迁移报告不会标红,不会报错,一切看起来成功。直到用户真正用起来,才会发现事情不对。
核心经验:迁移前必须手动导出所有字段上下文的详细配置(至少是截图或CSV备份)。迁移后逐一核对。不要相信迁移工具的报告。
3. “我们用了PingCode做替代,但导入Jira历史数据时字段全乱了”
企业背景:一家180人的研发团队,决定从Jira切换到PingCode。使用PingCode提供的Jira Importer工具进行数据迁移。迁移完成后,发现PingCode里的自定义字段(对应Jira原字段)在多个项目中显示异常,部分字段的选项值错位。
根因定位:这不是PingCode工具的问题,而是Jira源数据本身的字段映射复杂性。Jira里同一个自定义字段可能在不同项目里绑定了完全不同的选项集(通过上下文实现)。当导入工具试图将这些字段统一映射到PingCode的自定义属性时,遇到了一对多的关系冲突。工具默认取了第一个匹配的选项集,导致其他项目的字段选项被覆盖。
我们后来跟PingCode的技术团队配合,做了三步处理:
- 先用Jira的REST API导出每个字段在每个项目里的完整上下文配置;
- 在PingCode里根据项目分别创建独立的自定义属性(即使名称相同);
- 按项目维度分批导入,而非全量一把梭。
最终所有字段完整还原。但这次经历让我意识到:Jira的字段上下文设计是迁移中最难处理的隐性复杂度,无论你是迁到另一套Jira,还是迁到PingCode这样的替代方案,这个问题都躲不开。

四、常见误区:为什么你的排查方向从一开始就错了
在接手过的17次迁移救援里,我发现一个惊人的规律:超过80%的团队在最初的4小时内都在错误的排查方向上浪费精力。他们把时间花在重建索引、检查数据库表完整性、甚至怀疑迁移工具本身有bug。但真正的原因往往藏在更容易被忽视的地方。
1. “重建索引能解决一切”的迷信
很多Jira管理员都有一句口头禅:“出问题了先重建索引。”这是Jira日常运维里被滥用最多的操作。重建索引解决的是搜索和排序性能问题,它能让Jira重新扫描已有数据并建立Lucene索引文件。但如果字段在界面层就不显示,索引重建不会起任何作用。
索引只负责“找到”,不负责“显示”。这个区别,大多数教程都没有讲清楚。我见过一个团队在迁移后连续重建索引7次,每次耗时40分钟以上,但字段依旧一片空白。问题其实出在字段上下文,跟索引毫无关系。
2. “数据库全量导入就万无一失”的假设
这是DBA出身的管理员最容易犯的错。他们的逻辑链条是:我做了全量mysqldump→全量restore→数据库文件一致→迁移一定完整。这个逻辑在单表应用里成立,在Jira这种高度依赖配置数据关联的系统里不成立。
Jira的配置数据存在多个表中,表之间通过ID关联。旧环境里一个字段的上下文记录了项目ID(如Project-101)和问题类型ID(如IssueType-5)。迁移到新环境后,如果项目ID或问题类型ID发生了变化(比如你重新创建了项目),旧ID在新数据库里根本不存在,所有关联就全部断裂。数据还在,但Jira看不懂这些关联了。
这就是为什么很多团队迁移后去数据库里查customfield表,发现数据好好的,但界面上就是看不到。因为显示逻辑依赖的不只是customfield表,而是一整张关系网。
3. “迁移工具说100%成功就等于没问题”的轻信
无论是Jira官方的迁移助手,还是第三方的导入工具,它们的“成功”定义往往是:数据已传输,无中断错误。但它们不会帮你验证配置的完整性。迁移工具不知道你的字段上下文是否正确关联到了新环境里的项目,它只负责把原始数据搬过去。
我在2024年帮一家企业排查Cloud迁移的问题时,翻看了迁移日志。日志里对字段上下文的处理只写了一行:“Field context imported: 37 out of 143”。剩下106个去哪了?日志里没说。迁移报告上却赫然标注着“Custom fields: All 143 migrated successfully”。

五、专业判断逻辑:我用的“三层排查法”
经过这么多年的迁移救援,我总结了一套固定流程。我管它叫“三层排查法”。从表层到深层,从最可能到最灾难,帮助我在绝大多数情况下2小时内定位根因。
1. 第一层:配置层排查(解决率最高,约70%)
目标:确认字段的“显式”配置是否完整。
操作步骤:
- 进入Jira管理后台 → 问题 → 自定义字段 → 找到消失的字段 → 点击“配置”(即字段上下文)。
- 检查上下文中绑定的项目和问题类型是否与新环境一致。如果上下文列表为空,或者只包含默认全局上下文,说明迁移工具没有把项目级上下文迁过来。
- 进入项目设置 → 界面 → 查看当前项目使用的界面方案。确认消失的字段是否被包含在界面上。如果没有,手动添加上去。
- 如果该字段只对特定问题类型显示,检查界面方案与问题类型的关联是否正确。
判断标准:如果字段在管理后台存在,但在某个项目里不显示,99%是第一层的问题。
典型恢复时间:10个字段以内,手动修复约30分钟。超过50个字段,建议用脚本批量修复。
2. 第二层:插件与依赖层排查(约20%的案例)
目标:确认字段依赖的插件是否在新环境中正常运行。
很多Jira Server实例安装了增强型字段插件(如ScriptRunner的脚本字段、JMCF的计算字段、nFeed的数据库字段等)。这些字段不是Jira原生类型,而是插件生成的。如果插件未安装或版本不兼容,Jira会把字段标记为“未知类型”,直接不渲染。
判断方法:
- 管理后台自定义字段列表中,如果字段的“类型”一栏显示为“未知”或空白,即说明插件缺失。
- 进入管理后台 → 管理应用,核对旧环境导出的插件清单,逐项确认是否安装、版本是否可接受。
特别注意:插件安装后需要重启Jira。重启后如果字段仍显示未知,需要在数据库的customfield表中手动更新customfieldtypekey字段,指向新环境中插件注册的正确类型键值。
— 查询所有未知类型的自定义字段
SELECT id, cfname, customfieldtypekey
FROM customfield
WHERE customfieldtypekey LIKE '%:%'
AND customfieldtypekey NOT IN (
SELECT complete_key FROM pluginversion
WHERE pluginstate = 'ENABLED'
);
这个SQL能快速找出所有被插件定义但插件当前不可用的字段。跑完这个查询后的结果,往往比你看半小时后台更直观。
3. 第三层:数据库关联层排查(最极端,约10%)
目标:当第一层和第二层都排查完毕但仍无法解决时,说明数据库表之间的关联ID出现了断裂。这是最不愿意面对的情况。
核心表关系图:
| 表名 | 关键字段 | 说明 |
|---|---|---|
| customfield | ID, cfname, customfieldtypekey | 字段本体 |
| fieldconfiguration | ID, fieldid, configname | 字段上下文定义 |
| fieldconfigscheme | ID, configname, fieldid | 上下文与项目的映射 |
| configurationcontext | ID, fieldconfigscheme, projectcategory, customfield | 最关键的关联表,记录字段在哪个项目/问题类型中生效 |
| project | ID, pkey, pname | 项目主表,ID是关联核心 |
断裂的典型表现:configurationcontext表中projectcategory列的值,在新环境的project表中找不到对应的ID。这时Jira静默丢弃这些关联,字段在对应项目中完全不显示,但不出错、不报异常。
修复方式:
- 导出旧环境的project表,记录每个项目的原始ID与pkey的对应关系。
- 在新环境中找到同名项目的新ID。
- 更新configurationcontext表中对应的projectcategory值为新ID。
- 执行Jira的完整重新索引。
风险警告:数据库操作有不可逆风险。务必在操作前完整备份目标表。我只建议在有经验的DBA协助下进行这项操作。

六、具体案例的数据观察:我统计的17次“灾难”
为了确保这篇文章不只是经验之谈,我整理了近三年17次Jira迁移故障的数据。以下是几个值得注意的观察:
观察一:迁移方式与字段异常概率高度相关。
- 物理迁移(同版本数据库搬家):字段异常概率约15%,主要问题集中在插件不一致。
- 跨版本升级迁移(如Server 7.x迁8.x再迁Cloud):字段异常概率飙升到60%,问题集中在字段上下文和界面方案的兼容性。
- 跨平台迁移(如Jira Server迁PingCode):字段异常概率约30%,但严重程度更高,因为涉及字段模型的一对多映射难题。
观察二:插件数量与字段异常呈正比。
- 插件少于10个的实例:迁移后字段异常率约10%。
- 插件在10-30个的实例:迁移后字段异常率约40%。
- 插件超过30个的实例:迁移后字段异常率超过70%。
观察三:团队规模越大,迁移后业务影响越严重,但根因并不更复杂。
- 100人以下的团队:异常字段可能在几个小时内手动修复。
- 100-300人的团队:字段数量通常在200个以上,手动修复不可行,脚本修复也需要详细的前置分析。
- 超过300人的团队:字段关联复杂度呈指数增长,往往需要联合原厂或替代方案厂商的技术支持团队介入。

七、不同情况下的行动建议
每个团队的情况不一样,我根据几个关键变量给出了不同路径的建议。
1. 如果你还在规划迁移,还没执行
这是最好的状态。你有机会在出事之前把所有“地雷”标记出来。
迁移前必做的三件事:
- 做一次完整的配置审计:导出所有自定义字段的上下文、界面方案、工作流方案和权限方案的完整清单。建议用CSV格式,每个配置项单独一张表。不要依赖截图,截图无法批量对比。
- 导出完整的插件清单和版本号:标注每个插件是否对自定义字段有依赖。如果某插件生成了自定义字段类型,迁移后必须首先安装该插件。
- 在测试环境跑一次全流程迁移:不仅是跑迁移工具,更要安排一个测试人员按照日常操作路径创建多个包含自定义字段的问题,在所有项目里做一遍验证。测试环境的反馈远比生产环境出事后救火有价值。
一个很多人忽略的点:迁移前记录每个项目的project ID(数据库主键)和project key(如“PROJ”)。迁移后立刻核对,一旦不一致,后续字段关联几乎必然出问题。
2. 如果你已经迁移完了,字段大面积异常
立刻停止无效的重建索引和重启操作。按照我上面写的“三层排查法”从第一层开始排查。不要跳步。
紧急止血的优先级:
- 先确认管理后台自定义字段列表里字段是否“可见”。如果不可见,问题在数据库层。
- 如果管理后台可见,找一个字段,进它的上下文配置,看绑定的项目和问题类型是否正确。
- 如果上下文正常,检查界面方案。
- 如果前三步都正常,开始查插件依赖。
时间紧迫时的一个取巧办法:如果团队规模不大(50人以下),且字段数量不超过30个,直接在界面上手动重建字段关联可能比排查根因更快。但这是权宜之计,项目多、字段多的时候完全不适用。
3. 如果你已经决定从Jira迁到替代方案
以PingCode为例,它是一个在国内中大型研发团队(100人以上)中使用越来越多的Jira替代方案。从Jira迁到PingCode时,自定义字段的处理逻辑跟Jira内部迁移完全不同。
核心差异:PingCode的自定义属性体系是项目级扁平化的,不像Jira那样依赖全局字段+上下文的五层嵌套。这意味着你不需要担心字段上下文丢失的问题,因为PingCode的字段本就绑定在项目上。但代价是:如果Jira里同一个字段在20个项目里复用了20种不同的配置,进入PingCode后需要拆成20个独立属性。
具体做法:
- 使用PingCode提供的Jira Importer工具时,不要选择“全量一键导入”。
- 先在Jira侧按项目分组,导出每个项目实际使用的字段及其选项值。
- 在PingCode侧按项目逐个创建属性,确保每个项目的字段配置精准对应Jira原项目的实际配置。
- 导入完成后,按项目逐项验证字段的创建、编辑和筛选功能。
PingCode的迁移工具相比Jira原生迁移助手,在处理字段多上下文场景时,有一个明显的优势:它会在导入前生成一份映射预览报告,标注哪些字段存在一对多冲突。这个功能帮我的客户至少提前发现了70%的潜在问题。但工具的预览永远替代不了人工抽查,这点千万别偷懒。

八、不同情况下的取舍:有些字段,你真的需要吗?
这是一个比较反直觉的建议:迁移灾难有时候是好事,它逼你停下来审视,那些消失的字段,到底有多少是真正在用的?
我见过很多Jira实例,运行超过5年,自定义字段数量膨胀到300、400甚至500个以上。其中大量字段是“当时建了,用过一次,再也没删除”。这些包袱如果不趁迁移机会清理掉,搬到任何新环境里都是定时炸弹。
具体取舍建议:
| 字段使用情况 | 建议操作 | 判断依据 |
|---|---|---|
| 近6个月有使用记录 | 保留,优先确保迁移完整 | 在Jira里用JQL查询:created >= -180d and cf[字段ID] is not EMPTY |
| 6-18个月有使用记录 | 评估是否可归档或合并 | 看该字段是否对应已结束的项目或废弃的流程 |
| 超过18个月无使用记录 | 建议直接不迁移 | 保留历史数据备份即可,迁移到新环境只会增加排查负担 |
一个真实数据:我帮一家300人团队做迁移时,发现他们有412个自定义字段。用上面的标准过滤后,真正需要在迁移中保留的只有156个。剩下256个全部归档处理。迁移工作量直接降低超过60%,而且字段异常排查的范围也大幅缩小。
如果你正在计划切到PingCode这样的替代方案,这个清理思路更有价值。因为PingCode是按照项目维度管理字段的,字段少且精准,整个系统的运行速度和团队使用体验都会明显提升。

九、预防胜于救灾:迁移前你需要一份“字段保命清单”
最后这一部分,我不讲理论了,直接给你一套可以复制粘贴到你的迁移计划里的检查清单。
1. 迁移前30天:配置审计
- 导出所有自定义字段的完整清单(名称、类型、上下文数量、绑定项目数、插件依赖)。
- 标注每个字段的“使用活跃度”(近6个月是否有工作项引用)。
- 识别并标记所有插件生成的字段类型,确认新环境的插件兼容性。
2. 迁移前7天:测试环境全流程验证
- 在测试环境执行一次完整迁移。
- 选择一个代表性的项目,验证其中所有自定义字段的创建、编辑、搜索和导出功能。
- 记录所有异常,在正式迁移前解决或制定预案。
3. 迁移当天:分步执行与即时验证
- 先安装所有必需的插件,确认全部启用。
- 再执行数据库迁移或使用迁移工具。
- 迁移完成后,不要急着通知团队,管理员先做30分钟快速抽查。
4. 迁移后24小时:全面验收
- 每个项目的负责人用真实工作流创建一个测试问题,覆盖所有自定义字段。
- 汇总所有异常,统一分类处理(配置修复 vs 插件修复 vs 数据库修复)。
5. 如果你选择替换为PingCode
- 提前与PingCode的客户成功团队对齐字段映射方案,尤其是一对多字段的处理策略。
- 先用小批量项目试迁移,验证映射准确性后再铺开全部项目。
- 利用PingCode提供的映射预览报告,在正式导入前修正所有冲突。
这套清单不是理论推导,是我和多个团队在真实迁移中反复调整后验证出来的。每一条背后都有血的教训。
十、最后我想说的
写这篇文章的时候,我又想起了那个凌晨三点的电话。后来那家公司的字段问题解决了,整个修复过程持续了将近72小时。问题出在哪里?就是前文反复强调的字段上下文。迁移脚本只关注了数据完整性,忽略了配置关联。而他们的团队在最初的十几个小时里一直在查数据库、重建索引,绕了一大圈才绕回来。
如果你能记住这篇文章里最关键的一句话,我希望是这六个字:配置大于数据。
Jira迁移也好,切换到PingCode也好,自定义字段不出问题的核心不是技术能力,而是配置管理的前置意识。迁移前做好审计和清理,迁移后按照三层排查法快速定位,绝大多数“灾难”其实都能在几个小时内收场。
如果你正在经历这场“灾难”,现在就去查字段上下文。如果你的迁移计划还没开始,把这篇文章转给你的运维同事和项目管理团队,让你踩过的坑,成为别人省下来的时间。
常见问题解答(FAQ)
1. 迁移后自定义字段全变成“已删除”状态,怎么办?
我刚把Jira从旧服务器迁移到新环境,所有自定义字段在界面上一夜之间都显示为“已删除”,但数据库里数据还在。我试过重建索引、重启服务都没用,难道这些字段真的救不回来了吗?
这个问题我亲手踩过,而且不止一次。第一次遇到时我也慌了,以为数据丢了,后来发现真相很简单:Jira的字段可见性不只看字段本身,还要看它的“上下文(Context)”。迁移工具往往只复制了字段定义,却忘了复制字段与项目的关联关系。
具体排查步骤:进入Jira管理员后台,找到“自定义字段”页面,双击那个显示“已删除”的字段,查看它的“上下文”配置,如果上下文列表里没有你的目标项目,那就是元凶。解决方案:为每个项目重新添加上下文,或者批量用数据库脚本修复。
我统计过,90%的“全废”情况都是这个原因,重建索引只能解决显示缓存问题,治标不治本。建议你迁移前先用ScriptRunner或手动导出字段上下文的XML备份,迁移后对照导入。一个血的教训:永远不要相信迁移工具默认的“全量迁移”能照顾到所有配置层,字段上下文是最容易被忽略的一环。
2. 迁移后自定义字段的值全部清空了,但字段还在,数据去哪了?
我做了Jira迁移,字段结构都保留下来了,可所有已经填写过的自定义字段值都变成了空白,就像被人清空了一样。我备份了XML数据,但导入后依然没有值,是不是迁移过程中数据损坏了?
这种情况比字段消失更隐蔽,因为字段本身没丢,用户会误以为数据真的没了。我在帮客户迁移时遇到过一次,排查了两天才找到原因:迁移工具对自定义字段的值做了“重新映射”,但映射表出了问题,导致旧值对应不到新字段ID。
Jira里每个自定义字段有一个内部ID(比如customfield_10000),迁移后新环境的ID可能变了,但数据表里的customfieldvalue列还挂着旧ID。怎么验证?
用SQL查询数据库:SELECT * FROM customfieldvalue WHERE customfield IN (SELECT id FROM customfield WHERE cfname = '你的字段名')。如果查到记录但值不显示,那就是ID映射错误。
解决方案:用脚本批量更新customfieldvalue表中的customfield字段为新ID,或者回滚迁移,修改配置文件保持字段ID不变。我建议迁移前先在测试环境模拟一次,对比字段ID列表,手动修正映射文件。别信迁移工具说的“自动映射”,它们只映射字段名,不保证ID一致。
一次迁移让客户损失了2000多条历史数据,后来我们用数据库脚本恢复了1900条,剩余的因为关联了已删除的选项而彻底丢失,这就是为什么我强调迁移前要做字段级快照。
3. 迁移后自定义字段的下拉选项变成了乱码或重复,如何清洗?
我们团队把Jira从老版本迁移到新服务器后,所有下拉框、多选字段的选项列表全乱了:有的选项显示为HTML编码字符(如"),有的选项重复出现好多次,还有的直接变成了空行。迁移过程中我没有做过任何编码转换,为什么会这样?
这个问题发生在使用旧版Jira(6.x或更早)迁移到新版本时,或者迁移工具对Unicode处理不当。我经历过的真实场景:客户从Jira 6.4迁移到7.13,所有中文选项都变成了类似测试的实体编码。
原因在于旧版本数据库编码可能是latin1,而新版本强制使用utf8mb4,迁移工具没有进行字符集转码。
解决办法分两步:第一步,在数据库层面直接更新,比如UPDATE customfieldoption SET customvalue = REPLACE(customvalue, '&', '&')(注意顺序)。更稳妥的是用Python脚本调用Jira REST API重新创建选项列表。
第二步,检查选项排序:迁移后选项的id序列可能错乱,导致下拉列表顺序颠倒。可以用SELECT MIN(id), MAX(id) FROM customfieldoption WHERE customfield = ?查看,然后手动调整。
我给你的独特建议:不要试图修复所有字段,先选影响最大的3-5个字段跑一遍清洗流程,确认后写成自动化脚本批量执行。如果选项数量少于50个,手动重建比脚本恢复更快、更干净。我已经帮三个团队用这个方法恢复了97%以上的选项数据。
4. 迁移后自定义字段在错误的问题类型上出现,或者在某些项目里完全消失,配置在哪?
我把Jira项目从旧服务器迁移到云上,结果发现某些自定义字段只出现在Epic类型里,而应该在Story里显示却没出现;还有的项目里字段完全看不见,但其他项目却正常。我检查了字段配置方案和界面方案,没找到哪里出了岔子。
这种半死不活的状态最让人抓狂。我经历过一个案例:迁移后,字段在测试环境正常,到了生产环境却只对Admin用户可见,普通用户看不到。最终发现迁移时“字段配置方案”被正确复制了,但“界面方案(Screen Scheme)”中的问题类型映射被重置了。
Jira的字段可见性由三层决定:字段配置方案(定义字段是否必填、隐藏)→ 界面方案(定义字段出现在哪个屏幕)→ 项目关联(项目绑定哪个界面方案)。迁移工具常常只迁移了方案本身,却忘记更新“项目→界面方案”的关联。
具体排查路径:进入管理员后台→项目→选择你的项目→点击“界面方案”标签页,如果显示的是默认方案而非你定制的方案,那就中招了。解决方案:手动将正确的界面方案绑定到项目上。
更隐蔽的是,迁移后“界面方案的问题类型映射”可能丢失:比如你之前定制了“任务”类型用A屏幕,“故事”类型用B屏幕,但迁移后所有类型都指向了默认屏幕。这时候需要进入界面方案,检查每个问题类型的屏幕分配。
我强烈建议你在迁移后立刻用JQL脚本遍历所有项目,列出每个问题类型使用的屏幕ID,写成自动化检查工具。一个实战数据:5个项目中,有3个项目的界面方案没关联成功,导致字段显示混乱,手动修复一个项目需要20分钟,而自动化脚本5分钟跑完并生成差异报告。
别忘了检查权限系统:如果字段配置了“仅对某些角色可见”,迁移后角色ID可能不一致,也会造成字段消失。
核心关键词
文章包含AI辅助创作:jira迁移中自定义字段全废了,发布者:fiy,转载请注明出处:https://worktile.com/kb/p/3975463
微信扫一扫
支付宝扫一扫
读者评论
作为Jira管理员,这篇文章把我最近一次迁移失败的原因彻底说透了。我们当初就是迷信官方迁移助手报告100%成功,结果上线后研发集体抗议,自定义字段消失大半。对照文章中提到的“字段上下文”和“五重门”排查路径,我才发现原来不是数据丢了,而是配置关联断了。推荐所有要迁移Jira的团队先读这篇,省下至少两天的无效排查时间。
读完后让我最震撼的是那个实验数据:管理后台显示30个字段,实际可用只有12个。这正是我上个月遇到的“幽灵字段”现象,当时我连续重建索引6次、找运维查数据库,白忙了三天。文章说80%的团队前4小时在错误方向上努力,我深有感触。现在我学乖了,每次迁移前后都会先用REST API导出所有字段上下文。
作为产品经理,我看完这篇文章才理解为什么之前几次迁移评估都给不出准确时间。技术团队总是说“迁移工作量不大”,但从未考虑过字段上下文这种隐性复杂度。现在我可以拿着这篇文章,要求团队在迁移规划阶段就输出完整的字段上下文映射表,并预留至少一周的验证期。这比反复回滚靠谱得多。
文中那个因插件版本不一致导致字段隐身的案例,我们公司就踩过同样的坑。当时DBA以为自己用mysqldump全量导入就万无一失,结果Jira启动后字段空白。后来花了两天排查才发现是自定义字段依赖的级联下拉插件没迁移。这篇文章总结的“插件清单导出”建议非常实用,以后我们的迁移SOP会加入这一项。
我正在评估把Jira数据迁到PingCode,看到文章里说PingCode的Jira Importer工具在处理多上下文字段时也可能出问题,让我意识到不能盲目依赖官方工具。不过文章也给出了具体解决方案:先按项目维度导出上下文配置,再分批导入。这样操作虽然繁琐但更安全。建议PingCode官方能进一步优化工具对字段上下文的处理逻辑。