如何在 Travis CI 容器中安装支持 webp 的更新版 imagemagick?

How to install newer imagemagick with webp support in Travis CI container?

我想在 travis 中将 png 图像转换为 webp 替代品,但 Travis CI 使用相当旧的 ubuntu 版本 12.04,因此捆绑的 imagemagick 并不是真正最新的:

$ convert -version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

我知道我可以使用 sudo: required 在虚拟机中使用 travis 并在那里安装和构建东西。相反,我想使用 sudo: false 的容器化构建环境,因为它更快。

如果我尝试编译 libwepbimagemagick travis 给我权限被拒绝的错误,因为我没有 /usr/local/ 文件夹的权限:

$ make install
...
 /bin/mkdir -p '/usr/local/include/webp'
/bin/mkdir: cannot create directory `/usr/local/include/webp': Permission denied
...
The command "make install" failed and exited with 2 during .

Travis 允许用户更改 $PATH 并将二进制文件安装到 $HOME 目录。

这是 ruby 的完整示例。它只编译一次二进制文件并缓存它们。如果版本号不匹配,它只会重新安装它们。

language: ruby
sudo: false
dist: precise

cache:
  directories:
  - "$HOME/opt"

addons:
  apt:
    packages:
      - libjpeg-dev
      - libpng-dev
      - libgif-dev
env:
  global:
  - IMAGEMAGICK_VERSION: '7.0.3-10'
  - LIBWEBP_VERSION: '0.5.1'

# Install newer libwebp and imagemagick
before_install:
  # Update PATH so that travis can find newer imagemagick
  - export PATH=$HOME/opt/bin:$PATH

  # Checks if Imagemagick is already sufficient version
  # If not installs it from the sources
  - convert -version | grep $IMAGEMAGICK_VERSION || {
    export CORES=$(nproc) &&
    echo "Using $CORES cores for compiling..." &&
    cd /tmp &&
    curl -O https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP_VERSION.tar.gz &&
    tar xvzf libwebp-$LIBWEBP_VERSION.tar.gz &&
    cd libwebp-* &&
    ./configure --prefix=$HOME/opt &&
    make -j$CORES &&
    make install -j$CORES &&
    cd /tmp &&
    curl -O https://www.imagemagick.org/download/ImageMagick-$IMAGEMAGICK_VERSION.tar.gz &&
    tar xvzf ImageMagick-$IMAGEMAGICK_VERSION.tar.gz &&
    cd ImageMagick-* &&
    ./configure --prefix=$HOME/opt &&
    make -j$CORES &&
    make install -j$CORES &&
    $HOME/opt/bin/magick -version | grep $IMAGEMAGICK_VERSION &&
    cd $TRAVIS_BUILD_DIR; }

  # Update library paths for programs
  - export LD_FLAGS=-L$HOME/opt/lib
  - export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$HOME/opt/lib
  - export CPATH=$CPATH:$HOME/opt/include

致谢: 我查看了这个 ruby 库的安装方式 libwebp 并弄清楚其余部分很容易:https://github.com/le0pard/webp-ffi/blob/master/.travis.yml