【问题标题】:Install plugin with wp-cli in a CI environment在 CI 环境中使用 wp-cli 安装插件
【发布时间】:2020-08-21 08:06:41
【问题描述】:

我正在尝试将w3-total-cache plugin 安装在带有wp-cli 的wordpress docker 映像中,但它似乎尝试连接到数据库,即使很难我也不会尝试激活它。在 Dockerfile 中,我使用 composer 安装了其他主题/插件,一切看起来都很好,但是我为 w3tc 插件找到的唯一包是 https://packagist.org/packages/finaldream/w3-total-cache,它不是官方的,而且似乎也不是最新的(版本 0.9.4.6 而 w3tc 是版本 0.14.4)。

我可以使用wp-cli 在最终环境中的机器上安装它,因为它具有数据库,但似乎我无法在 CI 环境中安装以创建带有预安装插件的 docker 映像,而且我还没有找到关于它的其他问题和解决方案。

有没有办法在没有数据库的情况下在 CI 环境中安装插件?(在最终环境中,无论是 dev、staging 还是 production,我只会调用 wp-cli激活插件,就像我已经为使用 composer 安装的插件所做的那样)。

【问题讨论】:

    标签: wordpress w3-total-cache wp-cli


    【解决方案1】:

    我最终认为在这种情况下最好的选择是 curl 来自 wordpress 的 zip 文件(因为最后 wordpress 插件主要是 plugins 文件夹内的目录)。

    我在 dockerfile 中添加了以下说明:

    ENV W3TC_VERSION 0.14.4
    
    RUN mkdir -p /var/www/html/web/app/plugins \
     && curl -L https://downloads.wordpress.org/plugin/w3-total-cache.${W3TC_VERSION}.zip \
        -o /tmp/w3-total-cache.zip \
     && unzip /tmp/w3-total-cache.zip -d /var/www/html/web/app/plugins \
     && rm /tmp/w3-total-cache.zip \
     && chown -R www-data:www-data /var/www/html/web/app/plugins \
     && cp /var/www/html/web/app/plugins/w3-total-cache/wp-content/advanced-cache.php \
        /var/www/html/web/app/advanced-cache.php \
     && chown www-data:www-data /var/www/html/web/app/advanced-cache.php \
     && mkdir -p /var/www/html/web/app/cache \
     && chown www-data:www-data /var/www/html/web/app/cache \
     && mkdir -p /var/www/html/web/app/w3tc-config \
     && chown www-data:www-data /var/www/html/web/app/w3tc-config
    

    更新(2020-08-20)

    我按照 leymannx 在 cmets 中的建议做了,并在 composer.json 文件的安装后指令中包含了一条指令,以使用以下命令调用 shell 脚本:

    #!/bin/bash
    set -eou pipefail
    
    echo "$(date '+%F %X') Custom install - Start"
    
    W3TC_VERSION=0.14.4
    APP_DIR=/var/www/html/web/app
    PLUGINS_DIR="$APP_DIR/plugins"
    W3TC_URL="https://downloads.wordpress.org/plugin/w3-total-cache.${W3TC_VERSION}.zip"
    
    if [ ! -d "$PLUGINS_DIR/w3-total-cache" ]; then
        mkdir -p "$PLUGINS_DIR"
    
        curl -L "$W3TC_URL" -o /tmp/w3-total-cache.zip
    
        unzip /tmp/w3-total-cache.zip -d "$PLUGINS_DIR"
        rm /tmp/w3-total-cache.zip
    
        chown -R www-data:www-data "$PLUGINS_DIR"
    
        cp "$PLUGINS_DIR"/w3-total-cache/wp-content/advanced-cache.php \
            "$APP_DIR"/advanced-cache.php
        chown www-data:www-data "$APP_DIR"/advanced-cache.php
    
        mkdir -p "$APP_DIR"/cache
        chown www-data:www-data "$APP_DIR"/cache
    
        mkdir -p "$APP_DIR"/w3tc-config
        chown www-data:www-data "$APP_DIR"/w3tc-config
    fi
    
    echo "$(date '+%F %X') Custom install - End"
    

    (我还从Dockerfile 中删除了这些命令)

    这使得整个过程对于使用这个 wordpress 环境的人来说更加透明。

    【讨论】:

    • 你不能用 Composer 直接获取一些 repo 吗?我的意思是你已经用 Composer 管理你的项目了。否则可能把它作为composer.json中的一些安装后命令?只是:你第一次git clone项目的同事是怎么知道这个模块的,怎么下载的?
    • 但是我们将与 composer 一起使用哪个 repo?我在问题中提到的那个似乎已经过时并且不是官方的,并且是我找到的唯一一个。另一方面,下载的插件是官方的。在开发中我们会使用相同的 docker 镜像,但是因为我们会将 Wordpress 文件夹映射到我们的存储库,这会使插件无法访问,所以我正在考虑将 w3tc 插件文件夹复制到 docker 镜像中(毕竟,它是只是下载的插件文件夹)到安装脚本中机器中的plugins文件夹。
    • 也就是说,我将看看在composer.json 的安装后命令中包含它,以使整个过程更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多