使用Pandoc与Travis实现Markdown编译自动化失败求助
问题排查与修复方案
我一眼就看到几个导致body.md找不到的关键问题,咱们一步步来梳理和修复:
核心原因:Docker容器内的路径不匹配
你把本地的$TRAVIS_BUILD_DIR挂载到了容器的/documents/目录,但pandoc命令里直接写body.md时,容器的默认工作目录并不是/documents/——它会在镜像自带的默认目录(比如/)里找文件,自然找不到你挂载目录下的body.md。
修复步骤1:修正Docker运行命令的路径
有两种可靠的解决方式,选一种就行:
方式一:指定容器工作目录
在docker run命令里加上-w /documents/参数,让容器启动后直接进入挂载的目录,这样pandoc就能识别当前目录下的body.md了:
# 编译HTML的命令 docker run -w /documents/ -v $TRAVIS_BUILD_DIR:/documents/ --name pandoc-to-html jagregory/pandoc -v --standalone --toc --filter=pandoc-citeproc --data-dir=/documents/output body.md -o output/uwa.html # 编译PDF的命令 docker run -w /documents/ -v $TRAVIS_BUILD_DIR:/documents/ --name pandoc-to-pdf jagregory/pandoc --standalone --latex-engine=xelatex --filter=pandoc-citeproc --data-dir=/documents/output body.md -o output/uwa.pdf
方式二:使用绝对路径引用文件
直接在pandoc命令里用容器内的绝对路径/documents/body.md,同时把输出文件指定到/documents/output/目录(确保生成的文件能同步到本地的output文件夹):
# 编译HTML的命令 docker run -v $TRAVIS_BUILD_DIR:/documents/ --name pandoc-to-html jagregory/pandoc -v --standalone --toc --filter=pandoc-citeproc --data-dir=/documents/output /documents/body.md -o /documents/output/uwa.html # 编译PDF的命令 docker run -v $TRAVIS_BUILD_DIR:/documents/ --name pandoc-to-pdf jagregory/pandoc --standalone --latex-engine=xelatex --filter=pandoc-citeproc --data-dir=/documents/output /documents/body.md -o /documents/output/uwa.pdf
修复步骤2:修正部署脚本的文件名错误
你的after_success步骤里写了mv README.html index.html,但实际上你编译生成的是uwa.html,这会导致部署时找不到文件,必须改成:
cd output ; mv uwa.html index.html ; cp -R ../images images
额外优化:避免容器名称冲突
每次运行docker run时加上--rm参数,容器运行结束后会自动删除,防止下次构建时因为容器名称重复报错:
# 示例:带--rm的HTML编译命令 docker run --rm -w /documents/ -v $TRAVIS_BUILD_DIR:/documents/ jagregory/pandoc -v --standalone --toc --filter=pandoc-citeproc --data-dir=/documents/output body.md -o output/uwa.html
内容的提问来源于stack exchange,提问作者nunop
相关产品推荐
相关产品推荐

