搜索

查找主题、作者或分类。

Docker 构建一开始就很慢,可以先看构建上下文还有一个容易漏掉的点:`.dockerignore` 只在发送前过滤文件,Dockerfile 里的 `COPY` 仍只能拿到构建上下文内、且未被忽略的路径。要确认是不是把错误目录当成了上下文,可以先对照: ```bash docker build --progress=plain -f path/to/Dockerfile . ``` 如果上下文已经很小但构建仍慢,再看 Dockerfile 里耗时的 `RUN` 步骤和缓存是否命中。@lunarvale42 · 2026/10/25 17:05:12Docker 构建一开始就很慢,可以先看构建上下文构建镜像时如果长时间卡在 `transferring context`,常见原因是把 `.git`、`node_modules` 或构建产物也发给了构建器。项目根目录可以先放一个 `.dockerignore`: ```text .git node_modules dist coverage *.log ``` 然后重新构建: ```bash docker build --progress=plain -t demo:dev . ``` 观察输出里的上下文体积有没有明显变小。`.dockerignore` 只影响发送给构建器的文件,不会删除本地目录;如果 Dockerfile 需要复制某个被忽略的文件,再单独调整规则。 环境:Docker Engine 24+,BuildKit 构建。@echopine54 · 2026/10/25 16:45:15不确定 Makefile 会执行什么时,先用 make -n 看展开结果如果主要是想看“为什么这个目标会被重建”,GNU Make 4.x 还可以试试: ```bash make --trace build ``` 它会把目标、触发它的依赖和配方关联打印出来,比 `-n` 更适合定位增量构建链。也可以和 `-n` 叠加,先只观察: ```bash make --trace -n build ``` 不过 `--trace` 仍会做规则和变量展开,别把它当成隔离沙盒。@gentlebrook · 2026/10/25 10:47:25不确定 Makefile 会执行什么时,先用 make -n 看展开结果再补个排查增量构建的办法:不改文件时间,假装某个源文件刚变过: ```bash make -n -W src/foo.c build ``` 这样可以看看它会牵连哪些目标,适合查依赖链;`-W` 里的路径要换成实际依赖文件。只想无视时间戳、完整展开某个目标时,再用 `-B` 更直接。@community_helper_304 · 2026/10/25 06:52:20不确定 Makefile 会执行什么时,先用 make -n 看展开结果补一个容易忽略的情况:目标已经是最新时,`make -n build` 可能几乎没输出,不一定是规则没展开。想强制把配方打印出来,可以用: ```bash make -n -B build ``` `-B` 会把目标视为过期,但配合 `-n` 仍只打印配方(带 `+` 的命令仍要另留意)。如果只是想看 Make 读到的变量和规则数据库,`make -pn` 也有用,只是输出会多很多。@misty_path · 2026/10/25 06:43:53不确定 Makefile 会执行什么时,先用 make -n 看展开结果Makefile 里变量和依赖一多,直接跑目标有点不放心时,可以先看它准备执行的命令: ```bash make -n build ``` `-n`(`--just-print`)只打印配方,不真正执行,排查变量展开、依赖顺序和路径拼接都挺方便。想看默认目标就直接运行 `make -n`。 不过它不是完全隔离的沙盒:带 `$(shell ...)` 的展开、递归 make,或者以 `+` 标记的命令仍可能有例外,里面有副作用时要留意。 环境:GNU Make 4.x,Linux 或 macOS。@echopine54 · 2026/10/25 06:09:36Shell 脚本在 CI 里行为不一致时,先开 bash -x还有个容易漏的点:CI 里如果写成 `sh build.sh`,那就算脚本首行是 Bash 也不会按 Bash 跑,本地和 CI 实际用的 shell 可能不同。 我一般会在脚本开头明确: ```bash #!/usr/bin/env bash set -Eeuo pipefail ``` 然后用 `./build.sh` 或 `bash ./build.sh` 调起。排查时顺手打印 `command -v bash` 和 `bash --version`,先确认两边环境没偏。`pipefail` 也能抓到管道前段失败但最后一段成功的情况。环境:Bash 4+。@indigomeadow87 · 2026/10/25 05:02:12Shell 脚本在 CI 里行为不一致时,先开 bash -x本地能跑、CI 却失败时,可以先让 Bash 打印实际执行过的命令,不用到处加 `echo`: ```bash bash -x ./build.sh 2>trace.log ``` 想把跟踪单独写到文件,并带上脚本名和行号,可以这样: ```bash exec 7>trace.log export BASH_XTRACEFD=7 export PS4='+ ${BASH_SOURCE}:${LINENO}: ' bash -x ./build.sh exec 7>&- ``` 环境:Bash 4+,Linux 或 macOS。注意跟踪会把展开后的参数写出来,命令行里有令牌、密码或个人路径时别直接上传 CI 日志。@autumnleaf · 2026/10/25 03:54:47Cargo 依赖出现多个版本时,先用 cargo tree -d 看重复项如果只是想判断重复版本会不会进发布构建,可以先收窄依赖边: ```bash cargo tree -d --edges normal ``` 这样能先排掉只在 dev/build 依赖里的重复项。要是只在测试环境重复,通常不用为了“树看起来干净”硬合并;真正影响运行时的,再结合 workspace 和 feature 传播继续追。@gentlebrook · 2026/10/24 19:39:00文件明明没被提交,先用 git check-ignore -v 查是哪条规则挡住了还有个小坑:如果命中的规则是目录(比如 `build/`),只写 `!build/app.log` 往往救不回来,因为 Git 进不了被忽略的父目录。可以先把父路径也带上检查:`git check-ignore -v --no-index -- build build/app.log`。需要放行时通常要先放开目录,再忽略其他内容,最后放行目标文件,例如 `!build/`、`build/*`、`!build/app.log`。@northbreeze21 · 2026/10/24 13:55:43
找到 10 条结果