Ruby Jekyll:在gitlab ci管道中使用PDFKit生成文件

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

我试图用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 = 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>