Скрипт Vagrant для установки всех распространенных комбинаций версий PHP / WordPress

9

Я ищу способ быстрой и многократной настройки среды тестирования / отладки для нашего плагина, скорее всего, с использованием Vagrant . Такие проекты, как VVV, фокусируются на настройке одной среды (или пары сред, таких как stable / trunk), в то время как я ищу сценарий, который бы настраивал такие среды, как:

  • WP39-php52.local
  • wp40-php52.local
  • wp41-php52.local
  • WP39-php53.local
  • wp40-php53.local
  • и т.д. (вы поняли)

Есть ли такая вещь? Ближе всего я нашел WordPress Vagrant Boxes, который, по крайней мере, делает версии PHP, но, возможно, есть что-то более полное, что также добавляет версии WordPress в смесь. Спасибо.

Борек Бернард
источник
Вы, вероятно, знакомы с Travis CI . Существует скрипт, который позволит вам протестировать различные версии WordPress и PHP в вашей сборке Travis . Конечно, возможность настроить что-то подобное локально было бы лучше для некоторых целей отладки. Я не знаю бродячего сценария. Я знаю, что Трэвис использует phpenvдля управления различными версиями PHP. Может быть, комбинация этого и проверка SVN всего репозитория WordPress (который будет содержать все версии в /tags) будет началом?
JD
1
Что насчет Докера ? Вы можете создавать образы в разных средах, а затем создавать / запускать контейнеры с конкретными файлами Dockerfiles
rafawhs
@rafawhs Yep Docker - это то, что я хотел бы рассмотреть сегодня.
Борек Бернард

Ответы:

1

Что касается WordPress , Basic WordPress Vagrant Environment готов работать с любой версией WordPress (с небольшой помощью). Вам все равно нужно найти способ настроить PHP, но есть подсказка https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Использовать его из коробки; Скачайте или клонируйте проект wplatest-php55.dev/и запуститеvagrant up

Установка Vagrant Host Manager автоматически свяжет IP-адрес с вашей папкойhttp://wplatest-php55.dev/

Создание нескольких сред из версий WP через install-wp.sh

Проверьте архив на наличие возможных версий WordPress https://wordpress.org/download/release-archive/

# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

Вот сценарий, который перетаскивает мастер среды Vagrant в каталог сценария bash, клонирует сайт для каждой версии в массиве, настраивает задачу установки для использования этой версии WP и позволяет указать файл / папку для копирования на все сайты до вы vagrant up.

Поместите это в файл и install-wp.shзапустите, chmod +x install-wp.shчтобы сделать его исполняемым. Найдите папку, в которой вы хотите создать все эти ящики, и запустите ./install-wp.sh. Это создаст структуру выше.

Поскольку вы хотите проверить свой плагин во всех версиях, создайте папку в том же каталоге, что и скрипт, wp-content/plugins/your-pluginзатем запустите install-wp.sh wp-content. Файл / папка копируется в корень каждого сайта, поэтому я предлагаю wp-content.

install-wp.sh

#!/bin/bash
#
# Author: Jesse Graupmann @jgraup - http://www.justgooddesign.com - 2015
#
# Create multiple WordPress sites based on version numbers in array.
#
# ( OPTIONAL )
#   Copy common file/folder to all sites - Pass as parameter $1
#
# Each site runs in a Vagrant Environment:
#   https://github.com/ideasonpurpose/basic-wordpress-vagrant
#
# Best if used with:
#   https://github.com/smdahlen/vagrant-hostmanager
#
# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

# WordPress Versions
versions=( 3.9 4.2 4.3.1 )

# Move to the current directory
base=$(pwd); cd $base

# Vagrant Environment
remote_master="https://github.com/ideasonpurpose/basic-wordpress-vagrant/archive/master.zip"
vagrant_master_zip=$base/basic-wordpress-vagrant.zip

# Download Latest Environment - overwrite file for latest
wget -v -O $vagrant_master_zip $remote_master

# Loop through version #s
for VERSION in "${versions[@]}" ; do

flatv="${VERSION//.}"
dirname=wp$flatv-php55.dev

# Clone Environment
echo -e "\nCloning to: $base/$dirname\n"
mkdir -p $base/$dirname
tar -zxvf $vagrant_master_zip -C $base/$dirname --strip-components=1

# WordPress Versions
# Archives:  https://wordpress.org/download/release-archive/
# Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
# Latest: https://wordpress.org/latest.tar.gz

# Path to Ansible task
yml=$(cat $base/$dirname/ansible/roles/wordpress/tasks/install.yml)

### REPLACE THE ANSIBLE WP VERSION w/OUR VERSION
wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

echo "${yml/$wp_url_latest/$wp_url_version}" > $base/$dirname/ansible/roles/wordpress/tasks/install.yml

# (OPTIONAL) Copy common file/folder to all sites!
# pass as argument to .sh
#
# Example Folder:
# Make a common wp-content folder, then run install with
#
#   ./install-wp.sh wp-content
#
# Example File:
# Make a text file, then run install with
#
#   ./install-wp.sh my_file.txt
#
common_dest=$base/$dirname/site/

# Copy Folder
if [ -d "$1" ]; then
  echo "Copying $1 --> $common"
  # Directory must exist
  if [ -d "$1" ]; then
    folder_name=$(basename $1)
    mkdir -p $common_dest/$folder_name;
  fi
  cp -r $1 $common_dest

# or File
elif [ -f "$1" ]; then
  echo "Copying $1 --> $common_dest"
  file_name=$(basename $1)
  cp $1 $common_dest/$file_name
fi

## Create doc for quick glance at version number
dest="$base/$dirname"
remotewpzip="https://wordpress.org/wordpress-$VERSION.tar.gz"
txt=$dest/download-wp-$VERSION.txt
touch $txt
printf "WordPress Version: $VERSION - https://wordpress.org/download/release-archive/\n\nDownload Zip: $remotewpzip\n" > $txt

done

# The rest is just for show

echo -e "\nDone!\n\nNow just run 'vagrant up' in any of these:\n"

for VERSION in "${versions[@]}" ; do
  flatv="${VERSION//.}"
  dirname=wp$flatv-php55.dev
  echo -e "\t"$base/$dirname "\thttp://"$dirname
done

echo -e "\nMore Vagrant env info @ https://github.com/ideasonpurpose/basic-wordpress-vagrant"
echo -e "Best if used with https://github.com/smdahlen/vagrant-hostmanager\n\nENJOY!"

Обновить:

Оказывается, базовая среда WordPress Vagrant на самом деле не настроена для работы с несколькими версиями php, но базовая версия Wordpress Box может быть, если вы настроите задачу PHP . Я решил оставить оболочку скрипта, который обрабатывал бы несколько версий php.

#!/bin/bash
############################################
#
# PWD (script directory)
# ├── wp39-php55.dev
# ├── wp42-php55.dev
# └── wp431-php55.dev
#
############################################

# WordPress Versions

versions=( 3.9 4.2 4.3.1 )

# PHP Versions

pversions=( 5.4 5.5 5.6 )

############################################

# Move to the current directory

base=$(pwd); cd $base

############################################

# PHP Loop
for PVERSION in "${pversions[@]}" ; do
    pflatv="${PVERSION//.}"

    echo -e "==> PHP: $PVERSION\n"

    # WordPress loop
    for VERSION in "${versions[@]}" ; do
        flatv="${VERSION//.}"

        ############################################
        dirname=wp$flatv-php$pflatv.dev 
        ############################################

        # Environment
        echo -e "\t"$base/$dirname "\thttp://"$dirname 

        mkdir -p $base/$dirname

        ############################################

        # WordPress Versions
        # Archives:  https://wordpress.org/download/release-archive/
        # Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
        # Latest: https://wordpress.org/latest.tar.gz

        ############################################

        wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
        wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

        # Download WP

        echo -e "\tDownload WP: $wp_url_version"

        ############################################

        # PHP Packages at https://launchpad.net/~ondrej
        # You can get more information about the packages at https://deb.sury.org
        # For PHP 5.6 use: ppa:ondrej/php5-5.6
        # For PHP 5.5 use: ppa:ondrej/php5
        # For PHP 5.4 use: ppa:ondrej/php5-oldstable

        ############################################

        # Config PHP

        echo -e "\tConfigure PHP: $PVERSION\n"

    done # WordPress version
done # PHP version

exit 1
jgraup
источник
0

Вы смотрели на это?

puphpet

Если появляется, чтобы помочь вам создать файлы конфигурации. Похоже, вы можете настроить несколько vhosts и заставить его выполнять пользовательские команды после инициализации. Таким образом, вы могли бы настроить все папки, хосты и базы данных, а затем скопировать нужные версии с соответствующими файлами wp-config? Первоначально немного настроен, но может работать.

Я использую сценарий оболочки, сам. wp-install www.domain.com

В настоящее время работает только для одной установки, но его настройка не может быть невозможна, для этого нужно указать несколько аргументов или дополнительный файл 'config', поэтому настройте несколько vhosts. Как вы упомянули Vagrant, я предполагаю, что вышесказанное ближе к удовлетворению ваших потребностей.

Удачи!

GastroGeek
источник
Если я не ошибаюсь, PuPHPet не может делать PHP 5.2 и 5.3, поэтому он всегда будет ограничен как среда тестирования.
Борек Бернард
0

Все зависит от того, что вы хотите использовать и с какой ОС вы будете разрабатывать ...

Для бродяги, вот автоматизация для настройки с VVV: https://github.com/bradp/vv

И несколько других, построенных на бродяге:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Тем не менее, я предлагаю попробовать пантеон . Он позволяет вам делать все это бесплатно и имеет интеграцию с wp-cli, git, behat и т. Д. Есть и другие хостинговые платформы с такими функциями, как https://www.appfog.com/ и даже, я полагаю, wpengine.

Это также зависит от того, сколько вы хотите настроить с самого начала. Если вы только ищете быстрый способ настроить WordPress есть тонны скриптов на GitHub , как это или просто использовать WP-кли.

Брайан Уиллис
источник