我在Hexo中有一个长期运行的项目,最近我想将其更新到最新版本(6.3.0)。完成后,该项目在macOS
上正常运行,本地没有问题,并在Docker
上正常构建,但在GitLab CI上运行时,我收到以下错误:
Error: EISDIR: illegal operation on a directory, open '<directory>'
Dockerfile
用于测试:
FROM node:18.15.0-alpine3.16
WORKDIR /app
COPY . .
RUN apk update && apk add --no-cache yarn
CMD ["sh", "-c", "yarn install && yarn run generate && ls -l public"]
使用的package.json
:
{
"name": "my-project",
"version": "1.0.0",
"private": true,
"hexo": {
"version": "6.3.0"
},
"scripts": {
"server": "./node_modules/hexo/bin/hexo server --draft",
"generate": "./node_modules/hexo/bin/hexo generate"
},
"dependencies": {
"hexo": "6.3.0",
"hexo-generator-archive": "2.0.0",
"hexo-generator-category": "2.0.0",
"hexo-generator-feed": "3.0.0",
"hexo-generator-index": "3.0.0",
"hexo-generator-tag": "2.0.0",
"hexo-renderer-ejs": "2.0.0",
"hexo-renderer-marked": "6.0.0",
"hexo-renderer-stylus": "2.1.0",
"hexo-server": "3.0.0"
}
}
在本地运行:
docker build -t my-project .
docker run -it -rm my-project
一切都按预期工作。项目生成得很好。
但是当我在GitLab CI中执行这个Dockerfile
时,我得到了错误。
我的.gitlab-ci.yml
:
image: docker:20.10.23
variables:
DOCKER_TLS_CERTDIR: ""
services:
- docker:20.10.23-dind
before_script:
- docker info
deploy:
stage: deploy
only:
- master
script:
- docker build -t my-project .
- docker run my-project
我假设这与容器中的权限或Node.js设置有关,但我找不到它可能是什么。
我尝试了成千上万种不同的方法来解决这个问题,经历了多个SO问题,文档,我被卡住了:
- 在Gitlab上的Docker构建中尝试了Docker,但也尝试了常规的容器构建-以前它工作得很好。
- 尝试不同的Docker镜像版本
- 尝试了不同版本的
Node.js
运行时,尝试了npm
和yarn
更新:
这肯定是Hexo和Node.js运行时的问题。使用Node.js 12时一切正常。将Node.js升级到14(及更高版本)会导致构建失败。使用Hexo 3,5,6和7进行测试。
FATAL {
68 err: [Error: EISDIR: illegal operation on a directory, open 'some-path'] {
69 errno: -21,
70 code: 'EISDIR',
71 syscall: 'open',
72 path: 'some-path'
73 }
74} Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
所以现在唯一的选择似乎是坚持使用Node.js 12,但是没有更新Hexo的选项,因为新的包需要Node.js 14或更高版本。
1条答案
按热度按时间vuktfyat1#
在进一步调查并将此报告给Hexo GitHub后,我终于找到了解决问题的解决方案。
它与博客文章条目的 meta中的
permalink
属性有关。我修改了每篇博客文章的
permalink
属性,并将/index.html
附加到它:之前:
permalink: selenium/selenium-manager
之后:
permalink: selenium/selenium-manager/index.html
一旦完成了这一点,一切都开始像一个魅力。
帮助我找到解决方案的原始评论:https://github.com/hexojs/hexo/issues/4682#issuecomment-1149868769