这个办法是真可以了。 但是这没得完美解决的吗? 
没有,要等官方修复
将jenkins 改一下不要后台启动就好了,亲测有效!
怎么个改法?

mac 上安装多数用的官方提供的这个吧:
- Install the latest LTS version:
brew install jenkins-lts - Start the Jenkins service:
brew services start jenkins-lts - Restart the Jenkins service:
brew services restart jenkins-lts - Update the Jenkins version:
brew upgrade jenkins-lts
把这个关了,brew services stop jenkins-lts; 然后直接在命令行执行 jenkins-lts
用java启动,还是用系统服务启动?
我用 brew 安装的,直接命令行调用jenkins-lts 命令就行了,看上去是用java
是的,用homebrew装的。
我去试试看
这个方案确实也是可以的。难怪为什么我另一台mac机可以打包,因为另一台机器的jenkins就是做命令行启动的,不是做service启动的
我们这边保持空工程打开和修改jenkins执行方式都做了,有时候打包成功,但还是有概率会失败(碰到importer警告),请问楼主现在打包能一直成功吗?还有其他优化方法吗
开空工程后,就能一直打包成功了。 修改jenkins的执行方式,我也是有时成功有时失败
我这边也是开一个空工程项目,然后 jenkins 就可以正常打包。但是我发现我的 intel mac mini 没有任何问题。只有 m2 mac mini 会有问题。
intel mac mini:
系统版本:14.6.1
m2 mac mini
系统版本: 15.5
遇到同样的问题,要打开编辑器 才能正常在jenkins 打包,这个bug不修下吗
暂时找到了解决方法,就是ssh 进来本机后 再调用打包命令,这样就不在jenkins环境内了,能正常出包。
我前面有说。 不用jenkins是能正常打包的。 就是用jenkins不能打包。。 
3.8.8也是这个问题,偶尔就有一次汇报这个错误,而且meta文件也被修改了。
(帖子被作者删除,如无标记将在 24 小时后自动删除)
我们这边 3.8.8、本机 Mac Jenkins(Homebrew jenkins-lts LaunchAgent)也遇到了。
同一条 --project ... --build ...:Terminal 里跑几乎不改 meta;Jenkins Execute shell 直接跑,经常把大量 .meta 改成 "importer": "*"、"ver": "0.0.1"。开着同版本空工程再让 Jenkins 构建,我们这边无效。
对比进程:Jenkins 拉起的 Cocos 是 TTY=??,Terminal 拉起的是 ttys00x。
绕过(仅 macOS): Jenkins 不要直接 exec Cocos,用下面脚本让 Terminal.app 执行构建。我们连续多次不再脏 meta。
Jenkins 只包启动 Cocos 的那一行:
chmod +x run_in_terminal.sh
./run_in_terminal.sh /Applications/Cocos/Creator/3.8.8/CocosCreator.app/Contents/MacOS/CocosCreator \
--project /path/to/project \
--build "configPath=/path/to/buildConfig.json"
run_in_terminal.sh
#!/bin/bash
# 在 macOS Terminal.app 里执行命令,把退出码带回 Jenkins。
# 用于规避 Cocos Creator 3.8.7/3.8.8 在 Jenkins 无 TTY 下 CLI 写脏 .meta。
# 用法: ./run_in_terminal.sh /Applications/Cocos/Creator/3.8.8/CocosCreator.app/Contents/MacOS/CocosCreator --project ... --build "..."
set +x
set -euo pipefail
if [ $# -lt 1 ]; then
echo "用法: $0 <命令> [参数...]" >&2
exit 2
fi
run_dir="${RUN_IN_TERMINAL_LOG_DIR:-${TMPDIR:-/tmp}/run_in_terminal}"
mkdir -p "$run_dir"
stamp=$(date +%Y%m%d_%H%M%S)
job_tag=$(printf '%s' "${JOB_NAME:-manual}" | tr -c 'A-Za-z0-9._-' '_')
cmd_file="${run_dir}/${job_tag}_${stamp}.cmd.sh"
log_file="${run_dir}/${job_tag}_${stamp}.log"
exit_file="${run_dir}/${job_tag}_${stamp}.exit"
rm -f "$exit_file"
: > "$log_file"
python3 - "$PWD" "$exit_file" "$@" <<'PY' > "$cmd_file"
import os, shlex, sys
pwd, exit_file = sys.argv[1], sys.argv[2]
cmd = sys.argv[3:]
skip = {
"PATH", "PWD", "OLDPWD", "SHLVL", "_", "PS1", "PS2", "PS3", "PS4",
"TERM", "TERM_SESSION_ID", "SHELL", "XPC_SERVICE_NAME", "XPC_FLAGS",
"LaunchInstanceID", "SECURITYSESSIONID", "COMMAND_MODE",
}
print("#!/bin/zsh")
print("export LC_ALL=${LC_ALL:-en_US.UTF-8}")
print("export LANG=${LANG:-en_US.UTF-8}")
for key, value in os.environ.items():
if key in skip or key.startswith("BASH_FUNC_"):
continue
print(f"export {key}={shlex.quote(value)}")
print(f"cd {shlex.quote(pwd)}")
print('echo "Terminal TTY=$(tty)"')
print("set +e")
print(" ".join(shlex.quote(part) for part in cmd))
print("rc=$?")
print(f"echo $rc > {shlex.quote(exit_file)}")
print("exit $rc")
PY
chmod 700 "$cmd_file"
echo "[run_in_terminal] log=$log_file"
tail -n +1 -F "$log_file" &
tail_pid=$!
trap 'kill "$tail_pid" 2>/dev/null || true; wait "$tail_pid" 2>/dev/null || true' EXIT
osascript - "$cmd_file" "$log_file" <<'APPLESCRIPT'
on run argv
set cmdPath to item 1 of argv
set logPath to item 2 of argv
tell application "Terminal"
activate
set theTab to do script "exec /bin/zsh -lc " & quoted form of (cmdPath & " > " & logPath & " 2>&1")
delay 3
repeat
delay 2
if (busy of theTab) is false then exit repeat
end repeat
try
repeat with w in windows
if selected tab of w is theTab then
close w saving no
exit repeat
end if
end repeat
end try
end tell
end run
APPLESCRIPT
if [ ! -f "$exit_file" ]; then
echo "[run_in_terminal] 没有退出码,请允许控制 Terminal" >&2
exit 1
fi
rc=$(cat "$exit_file")
echo "[run_in_terminal] 退出码=$rc"
exit "$rc"
开空工程好使,记录下错误,让别人能搜到 Warn: [Assets] Importer exec warning: {}: The importer version is lower than asset