根据我的上一篇文章“使用Coding企业版自动部署mkdocs文档
”来进行部署mkdocs文档,最近出现了404问题。查看部署记录没有异样。
部署日志
检查再早前的部署记录,有两次是失败的,相比上方的日志输出,多了一行:
2019/08/06 18:15:41 .nojekyll found. No build will be performed.
因此猜测是因为mkdocs部署时自动生成的.nojekyll阻止了coding进行文档部署。
查看mkdocs源码:https://github.com/mkdocs/mkdocs/blob/master/mkdocs/utils/ghp_import.py
def add_nojekyll(pipe):
write(pipe, enc('M 100644 inline .nojekyll\n'))
write(pipe, enc('data 0\n'))
write(pipe, enc('\n'))
def run_import(srcdir, branch, message, nojekyll):
cmd = ['git', 'fast-import', '--date-format=raw', '--quiet']
kwargs = {"stdin": sp.PIPE}
if sys.version_info >= (3, 2, 0):
kwargs["universal_newlines"] = False
pipe = sp.Popen(cmd, **kwargs)
start_commit(pipe, branch, message)
for path, _, fnames in os.walk(srcdir):
for fn in fnames:
fpath = os.path.join(path, fn)
fpath = normalize_path(fpath)
gpath = gitpath(os.path.relpath(fpath, start=srcdir))
add_file(pipe, fpath, gpath)
if nojekyll:
add_nojekyll(pipe)
write(pipe, enc('\n'))
pipe.stdin.close()
if pipe.wait() != 0:
sys.stdout.write(enc("Failed to process commit.\n"))
def ghp_import(directory, message, remote='origin', branch='gh-pages', force=False):
if not try_rebase(remote, branch):
log.error("Failed to rebase %s branch.", branch)
nojekyll = True
run_import(directory, branch, message, nojekyll)
cmd = ['git', 'push', remote, branch]
if force:
cmd.insert(2, '--force')
proc = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE)
out, err = proc.communicate()
result = proc.wait() == 0
return result, dec(err)
可见在上述
“`run_import“`和“`ghp_import“`函数中,使用“`nojekyll“`变量来标识是否要写入nojekyll文件,而该变量是写死在代码里的。因此fork一份代码,修改上述对应文件,把上述引用的代码的27行中nojekyll值改为False。
然后把Jenkinsfile中
“`pip install mkdocs“`改成安装上面fork的仓库的地址即可,如:
pip install git+https://github.com/YOUR_USERNAME/mkdocs.git@master
保存即可。
另外,如希望跟随mkdocs官方进行升级,还需自己维护该仓库。
发表回复