Ruby Jekyll:在gitlab ci管道中使用PDFKit生成文件
我试图用jekyll生成一个静态网站,包括生成每篇文章的pdf文件 这是我的jekyll模块:Ruby Jekyll:在gitlab ci管道中使用PDFKit生成文件,ruby,pdf-generation,wkhtmltopdf,gitlab-ci,jekyll-extensions,Ruby,Pdf Generation,Wkhtmltopdf,Gitlab Ci,Jekyll Extensions,我试图用jekyll生成一个静态网站,包括生成每篇文章的pdf文件 这是我的jekyll模块: require 'pdfkit' module Jekyll Jekyll::Hooks.register :site, :post_write do |post| post.posts.docs.each do |post| filename = post.site.dest + post.id + ".pdf" dirname = Fi
require 'pdfkit'
module Jekyll
Jekyll::Hooks.register :site, :post_write do |post|
post.posts.docs.each do |post|
filename = post.site.dest + post.id + ".pdf"
dirname = File.dirname(filename)
Dir.mkdir(dirname) unless File.exists?(dirname)
kit = PDFKit.new(post.content, :page_size => 'Letter')
kit.stylesheets << './css/bootstrap.min.css'
kit.to_file(filename)
end
end
end
和注册表的Dockerfile.gitlab.com/thalion59fr/jekyll ci:master image:
(基于,稍后我将使用继承创建一个适当的Dockerfile)
来自阿尔卑斯山的
维护者大卫·冯·雷曼
ENV LANGUAGE=en_US
ENV LANG=en_US.UTF-8
ENV JEKYLL_ENV=开发
ENV LC_ALL=en_US
运行apk--更新添加zlib dev构建基libxml2 dev\
libxslt dev readline dev\
libffi-dev-ruby-dev-yaml-dev-zlib-libxml2\
构建基础ruby io控制台读线libxslt ruby yaml libffi nodejs ruby irb\
ruby-json-ruby-rake-ruby-rdoc-git-bash-curl-ttf-freefont-fontconfig
运行gem-clean&&gem-install--no-ri--no-rdoc\
bundler json:1.8.6 nokogiri:1.7.0.1 jekyll:3.4.0 wkhtmltopdf安装程序jekyll pdf
运行rm-rf/usr/lib/ruby/gems/*/cache/*.gem
#全局安装aerobatic cli
运行npm安装-g特技飞行-cli@1.0.33
最后,错误消息:
$ bundle exec jekyll build --trace
Configuration file: /builds/Thalion59fr/jekyll-wulin/_config.yml
Source: /builds/Thalion59fr/jekyll-wulin
Destination: /builds/Thalion59fr/jekyll-wulin/_site
Incremental build: disabled. Enable with --incremental
Generating...
bundler: failed to load command: jekyll (/usr/bin/jekyll)
Errno::EPIPE: Broken pipe
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in `write'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in `puts'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in `block in to_pdf'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:63:in `popen'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:63:in `to_pdf'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:76:in `to_file'
/builds/Thalion59fr/jekyll-wulin/_plugins/topdf.rb:31:in `block (2 levels) in <module:Jekyll>'
/builds/Thalion59fr/jekyll-wulin/_plugins/topdf.rb:19:in `each'
/builds/Thalion59fr/jekyll-wulin/_plugins/topdf.rb:19:in `block in <module:Jekyll>'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:98:in `block in trigger'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:97:in `each'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:97:in `trigger'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/site.rb:211:in `write'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/site.rb:71:in `process'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/command.rb:26:in `process_site'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:63:in `build'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:34:in `process'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:16:in `block (2 levels) in init_with_program'
/usr/lib/ruby/gems/2.3.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
/usr/lib/ruby/gems/2.3.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
/usr/lib/ruby/gems/2.3.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
/usr/lib/ruby/gems/2.3.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
/usr/lib/ruby/gems/2.3.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/exe/jekyll:13:in `<top (required)>'
/usr/bin/jekyll:22:in `load'
/usr/bin/jekyll:22:in `<top (required)>'
ERROR: Job failed: exit code 1
$bundle exec jekyll build--跟踪
配置文件:/builds/Thalion59fr/jekyll wulin/_config.yml
来源:/builds/Thalion59fr/jekyllwulin
目的地:/builds/Thalion59fr/jekyll-wulin/\u站点
增量生成:已禁用。使用--incremental启用
生成。。。
绑定器:无法加载命令:jekyll(/usr/bin/jekyll)
Errno::EPIPE:管道破裂
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in'write'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in'put'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:64:in'block in to_pdf'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:63:in'popen'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:63:in'to_pdf'
/usr/lib/ruby/gems/2.3.0/gems/pdfkit-0.8.2/lib/pdfkit/pdfkit.rb:76:in“to_文件”
/builds/Thalion59fr/jekyll-wulin/_-plugins/topdf.rb:31:in'block(2层)in'
/builds/Thalion59fr/jekyllwulin/_plugins/topdf.rb:19:in'each'
/builds/Thalion59fr/jekyll-wulin/_-plugins/topdf.rb:19:in'block-in'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:98:in'block in trigger'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:97:in'each'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/hooks.rb:97:in'trigger'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/site.rb:211:in'write'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/site.rb:71:正在进行中
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/command.rb:26:in'process\u site'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:63:in'build'
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:34:在“进程”中
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/lib/jekyll/commands/build.rb:16:in`block(2层)in init_with_程序'
/usr/lib/ruby/gems/2.3.0/gems/雇佣军-0.3.6/lib/雇佣军/command.rb:220:in'block in execute'
/usr/lib/ruby/gems/2.3.0/gems/雇佣军-0.3.6/lib/雇佣军/command.rb:220:in'each'
/usr/lib/ruby/gems/2.3.0/gems/雇佣军-0.3.6/lib/雇佣军/command.rb:220:in'execute'
/usr/lib/ruby/gems/2.3.0/gems/雇佣军-0.3.6/lib/雇佣军/program.rb:42:in'go'
/usr/lib/ruby/gems/2.3.0/gems/雇佣军-0.3.6/lib/雇佣军.rb:19:in“程序”
/usr/lib/ruby/gems/2.3.0/gems/jekyll-3.3.1/exe/jekyll:13:in`'
/usr/bin/jekyll:22:在“加载”中
/usr/bin/jekyll:22:in`'
错误:作业失败:退出代码1
谢谢你的帮助!
David我最终通过修改建筑图像解决了这个问题:
FROM aerobatic/jekyll:0.0.2
MAINTAINER David Vergison <david.vergison@gmail.com>
ADD xvfb-run /usr/bin/
RUN chmod +x /usr/bin/xvfb-run \
&& gem update --system \
&& gem install --no-ri --no-rdoc gimli \
&& apk --update add curl ttf-freefont fontconfig xvfb qt5-qtbase-dev dbus \
&& rm -rf /var/cache/apk/* \
如您所见,我放弃了使用jekyll生成pdf。在“jekyll构建”之前,我使用gimli生成pdf文档。
然后我在posts布局中使用一些流动标记:
<a href="/statics/{{page.path | split: '/' | last | split: '.' | first}}.pdf">download as pdf</a>
xvfb允许wkhtmltopdf无头执行,脚本命令在此执行:
它不是很整洁,但现在就可以了。
我现在必须处理css,但是使用gimli会很容易
FROM aerobatic/jekyll:0.0.2
MAINTAINER David Vergison <david.vergison@gmail.com>
ADD xvfb-run /usr/bin/
RUN chmod +x /usr/bin/xvfb-run \
&& gem update --system \
&& gem install --no-ri --no-rdoc gimli \
&& apk --update add curl ttf-freefont fontconfig xvfb qt5-qtbase-dev dbus \
&& rm -rf /var/cache/apk/* \
stages:
- build
- deploy
build:
image: registry.gitlab.com/thalion59fr/jekyll-ci:master
stage: build
script:
- bundle install
- apk add wkhtmltopdf --no-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
- mkdir statics
- cd _posts/
- /usr/bin/xvfb-run -- gimli -o ../statics/
- cd ..
- bundle exec jekyll build --trace
only:
- master
artifacts:
when: on_success
expire_in: 3 days
paths:
- _site/
deploy:
image: aerobatic/jekyll
stage: deploy
script:
- aero deploy --directory _site
dependencies:
- build
<a href="/statics/{{page.path | split: '/' | last | split: '.' | first}}.pdf">download as pdf</a>