在 .gitignore 的一些坑

博客详细介绍了在Unity项目中遇到的资源文件丢失问题,特别是在使用.gitignore时如何正确配置以避免关键资源被忽略,确保项目正常运行。

在对接其他公司开发的项目时,由于交付给我们的是打包 zip 形式发送源码,一些因素的原因,没有经过太多的验证就上传到我司的代码仓库了。我司另外的 Android 开发人员在 clone 代码之后,结果运行闪退了。查看 log 日志,并没有发现较为显眼的错误。在代码中增加异常捕获也没有抓到相关的 log 。苦恼了一段时间后,我也很好奇,通过查看 error 层级的 log ,最终发现这一段 log

E/Unity: Unable to locate player settings. bin/Data/settings.xml

通过分析在我电脑上的源码之后,发现我的同事 clone 的项目代码中,在 assets 下 ben 文件的资源丢失。通过手动添加之后是编译运行成功了。这时,就知道应该是配置的 .gitignore 出现问题了。

我采用的配置方式是在 GitHub 上 Start 数量最多的 配置文件 。通过校验之后发现原来是 bin/ 的问题。但也很奇怪,这个是必须忽略的,通过查看相关文档发现,项目中把资源目录改成 bin 这种命名方式比较特殊,一些场景下是需要忽略掉的,比如 build/ 但修改它的目录名称又不行,内部使用的 SDK 中,已经把路径写死了。不太好处理。所以只能修改 .gitignore 文件。

通过查看相关文档之后,针对这个项目对 .gitignore 文件,如下:

 

现在的做法,就只修改你当前项目的 gitignore ,追加一个 !语法,过滤全局 bin 目录的情况下,不过滤这个指定的文件夹。


这样避免了缺少文件导致项目运行异常了。

[WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.git/logs/refs/remotes/origin/dev/branch_332743'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.git/logs/refs/remotes/origin/master_20241212.bug'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.git/logs/refs/remotes/origin/branch_disableBtn_20240509'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.git/logs/refs/remotes/origin/bug/bug_20240709'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.git/index'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/#6195531885'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/#6195759597.txt'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/#305870.sql'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/COA-INIT-RECORDS.sql'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/COA-INIT-DATA.sql'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/db/#458274.sql'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/README.md'] doesn't match coa.war [WeblogicDeploymentPlugin] - the following resource ['/root/.jenkins/workspace/UAT_FN_COA/.gitignore'] doesn't match coa.war [WeblogicDeploymentPlugin] - Deploying the artifact on the following target : (name=sbsfnuat) (host=10.190.84.71) (port=80) [WeblogicDeploymentPlugin] - Undeploying artifact ... [WeblogicDeploymentPlugin] - Artifact undeployed successfully. [WeblogicDeploymentPlugin] - Deploying artifact ... java.lang.RuntimeException: task completed abnormally (exit code = 1). Check your Weblogic Deployment logs. at org.jenkinsci.plugins.deploy.weblogic.task.DeploymentTaskServiceImpl.deploy(DeploymentTaskServiceImpl.java:248) at org.jenkinsci.plugins.deploy.weblogic.task.DeploymentTaskServiceImpl.perform(DeploymentTaskServiceImpl.java:178) at org.jenkinsci.plugins.deploy.weblogic.WeblogicDeploymentPlugin.perform(WeblogicDeploymentPlugin.java:303) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741) at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690) at hudson.model.Build$BuildExecution.post2(Build.java:186) at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635) at hudson.model.Run.execute(Run.java:1878) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:427) ERROR: [WeblogicDeploymentPlugin] - Failed to deploy. Check your Weblogic deployment logs. 发版遇到了这个错误 和发的新代码有关系吗
10-28
### ✅ 简短回答: > **这个错误和你新提交的代码没有直接关系。** > ❌ 这不是 Java 代码写错了,也不是 Spring Boot 启动失败。 > ✅ 这是 **Jenkins 部署配置严重错误** —— 你让 WebLogic 插件去部署整个项目目录(包括 `.git`、`README.md`、SQL 文件等),而不是一个 `.war` 包! --- ## 🔍 错误根本原因分析 你现在看到的日志非常关键: ```log [WeblogicDeploymentPlugin] - the following resource '/root/.jenkins/workspace/UAT_FN_COA/.git/logs/refs/remotes/origin/dev/branch_332743' doesn't match coa.war ``` 以及: - `.git/index` - `db/*.sql` - `README.md` - `.gitignore` 这些文件 **完全不属于 WAR 包内容**,它们是: - Git 版本控制元数据 - 数据库脚本 - 说明文档 👉 但 WebLogic Deployment Plugin 却在扫描它们! 这意味着:**你在 Jenkins 中配置的“要部署的路径”指向了整个 workspace 根目录或某个错误目录,而不是 `target/coa.war`!** --- ## 🧠 插件的工作原理(重要) WebLogic Deployment Plugin 的设计逻辑是: 1. 你告诉它:“我要部署这个 WAR 文件” → 路径如 `target/coa.war` 2. 它会上传并部署该 `.war` 文件到 WebLogic 3. 如果你填的是一个 **目录** 或 **通配符匹配了非 WAR 文件**,它就会尝试遍历所有文件,并对每个文件做校验: - 是不是 `.war`, `.ear`? - 名字是否匹配应用名(比如 `coa.war`)? 所以当你填错路径时,它就报出一堆: > `[xxx] doesn't match coa.war` 这不是警告,而是 **红牌警告:你传了个非法部署包!** --- ## ✅ 正确做法:只改 Jenkins 配置,不改代码 ### ✅ 第一步:确认生成了正确的 WAR 文件 登录 Jenkins 服务器,进入工作空间: ```bash cd /root/.jenkins/workspace/UAT_FN_COA ls -l target/coa*.war ``` 你应该看到类似输出: ``` -rw-r--r-- 1 jenkins jenkins 8923456 Jan 1 10:30 target/coa.war ``` 如果没有,请检查 Maven 是否成功执行了 `package` 阶段。 --- ### ✅ 第二步:修改 Jenkins 配置中的 “Path to WAR file” 进入你的 Jenkins Job → 配置页面 → 找到: > **Path to WAR file(s)** 将其改为: ``` target/coa.war ``` ✅ 正确示例: - `target/coa.war` - `target/coa-1.0.0.war`(如果你没设置 `<finalName>`) ❌ 绝对禁止填写: - `.` (整个 workspace) - `*` 或 `**` - `target/` - `db/` - `.git/` 这些都会导致插件扫描到不该扫描的文件。 --- ### ✅ 第三步:建议固定 WAR 文件名(防) 在 `pom.xml` 中添加: ```xml <build> <finalName>coa</finalName> <!-- 输出为 coa.war --> </build> ``` 这样每次构建都输出 `target/coa.war`,避免因版本变化导致路径失效。 --- ### ✅ 第四步:查看 WebLogic 实际日志定位最终失败原因 虽然 Jenkins 报错是 “task completed abnormally (exit code = 1)”,但这只是结果。 真正的原因在 **WebLogic 服务器的日志里**。 登录 WebLogic 服务器,查看: ```bash tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log ``` 搜索关键词: - `Deployment failed` - `java.io.IOException` - `Unable to access jarfile` - `Application with name coa already deployed but not stopped properly` - `web application at "/coa" is currently unavailable` 常见真实原因包括: - 上次部署未正常卸载(undeploy 失败) - Context root 冲突 - 权限不足无法写入 domain/apps/ - WAR 文件损坏或为空 --- ## 🚫 明确澄清:和新代码有关系吗? | 问题 | 是否相关 | |------|----------| | 新增了 Service 接口? | ❌ 无关(只要能编译成 war 就没问题) | | 修改了 `application.yml`? | ❌ 一般无关(除非配置错误导致启动失败) | | 提交了 SQL 脚本或 README? | ❌ 无关,但说明你可能把整个目录当成了部署包 | | 代码中有 bug? | ❌ 不影响部署过程本身 | > ✅ **结论:只要代码能通过 `mvn package` 打出 WAR 包,就能部署。当前问题是“根本就没传 WAR 包”,所以与代码无关。** --- ## ✅ 总结:解决步骤清单 | 步骤 | 操作 | |------|------| | 1 | 确认 `target/coa.war` 存在 | | 2 | 修改 Jenkins 配置 → “Path to WAR file” 改为 `target/coa.war` | | 3 | 建议加 `<finalName>coa</finalName>` 固定文件名 | | 4 | 清理旧的 undeploy/deploy 记录(如有锁) | | 5 | 查看 WebLogic 日志确认真实失败原因 | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值