本地是好的在持续集成中是坏的
说明和分析
- 持续集成公共节点的每次构建都会提供一个全新的 Linux 环境给构建使用。
- 使用的是持续集成公共节点,是否开启了缓存目录,如果开启了清理一下缓存再试试。
- 如果使用的自定义节点,构建环境是用户自己提供的机器,CODING 侧是无法控制。可以试试 自定义构建环境 将您的构建跑在 Docker 容器中,这样每次构建都是全新的容器环境与宿主机无关。
常见情况
下面将展示两种最常见的情况,最常见的情况不表示其他的语言工具不会出现。
本地是好的,持续集成是坏的
本地有依赖缓存导致本地可以构建成功,但是持续集成中是没有的,这种情况常见于 Java + Maven 构建。
昨天构建是好的,今天坏了
这种情况常见与前端构建,NPM 是语义化版本策略 SemVer。 而你的代码仓库中没有存储 package-lock.json
或 yarn.lock
或者是 Docker 中使用的时候 Dockerfile 没有将 package-lock.json
或 yarn.lock
COPY 进来。
而使用的包很巧有更新,且开发者又没有严格遵守规范,且引入了破坏性更新,就会导致构建失败。
如何验证
在本地执行构建命令,将构建命令运行在 Docker(Docker 提供一个全新的完整的环境) 中。
- 验证 Java + Maven
# 这里使用的 maven:3.8.6-openjdk-8-slim 是 mvn 3.8.6 + java 8 的镜像,请在 Dockerhub 上查找您需要的版本
docker run -it -v $(pwd):/root/app -w /root/app maven:3.8.6-openjdk-8-slim bash -c "mvn clean package -Dskip.test=true -DskipTests -Dmaven.test.skip=true"
- 验证 Node
# 这里使用的 node:14.21.3 bash,请在 Dockerhub 上查找您需要的版本
docker run -it -v $(pwd):/root/app -w /root/app node:14.21.3 bash -c "npm install && npm run build"
参考
问题反馈 >
2024-11-04最近更新
感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。