Script Vagrant pour configurer toutes les combinaisons de versions PHP / WordPress courantes


9

Je cherche un moyen de configurer rapidement et à plusieurs reprises un environnement de test / débogage pour notre plugin, très probablement en utilisant Vagrant . Des projets comme VVV se concentrent sur une configuration à environnement unique (ou, quelques environnements comme stable / trunk) tandis que ce que je recherche est un script qui configurerait des environnements comme:

  • wp39-php52.local
  • wp40-php52.local
  • wp41-php52.local
  • wp39-php53.local
  • wp40-php53.local
  • etc. (vous avez l'idée)

Y a-t-il une telle chose? Le plus proche que j'ai trouvé est WordPress Vagrant Boxes qui fait au moins les versions PHP mais peut-être qu'il y a quelque chose de plus complet qui ajoute également des versions WordPress au mélange. Merci.


Vous connaissez probablement Travis CI . Il existe un script qui vous permettra de tester différentes versions de WordPress et PHP dans votre build Travis . Bien sûr, être capable de configurer quelque chose comme ça localement serait mieux à des fins de débogage. Je ne connais pas de script Vagrant. Je sais que Travis utilise phpenvpour gérer les différentes versions de PHP. Peut-être qu'une combinaison de cela et une vérification SVN de l'ensemble du repo WordPress (qui contiendrait toutes les versions ci-dessous /tags) serait un début?
JD

1
Et Docker ? Vous pouvez créer des images avec différents environnements, puis créer / exécuter des conteneurs avec des Dockerfiles
rafawhs

@rafawhs Yep Docker est ce que je considérerais aujourd'hui.
Borek Bernard

Réponses:


1

Du côté de WordPress, Basic Vagrant Environment est prêt à fonctionner avec n'importe quelle version de WordPress (avec un peu d'aide). Vous auriez encore besoin de trouver un moyen de configurer le PHP mais il y a un indice dans https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Pour l'utiliser hors de la boîte; Téléchargez ou clonez le projet wplatest-php55.dev/et exécutez-levagrant up

L'installation de Vagrant Host Manager liera automatiquement l'IP à votre dossierhttp://wplatest-php55.dev/

Générez plusieurs environnements à partir des versions WP via install-wp.sh

Vérifiez les archives pour les versions possibles de 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

Voici un script qui tire le maître de l'environnement Vagrant vers le répertoire du script bash, clone un site pour chaque version du tableau, configure la tâche d'installation pour utiliser cette version WP et vous permet de spécifier un fichier / dossier à copier sur tous les sites avant vous vagrant up.

Mettez-le dans un fichier install-wp.shpuis exécutez-le chmod +x install-wp.shpour le rendre exécutable. Recherchez un dossier dans lequel vous souhaitez créer toutes ces boîtes et exécutez ./install-wp.sh. Cela va générer la structure ci-dessus.

Puisque vous voulez tester votre plugin dans toutes les versions, créez un dossier dans le même répertoire que le script wp-content/plugins/your-pluginpuis exécutez install-wp.sh wp-content. Le fichier / dossier est copié à la racine de chaque site, c'est pourquoi je suggère 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!"

Mise à jour:

Il s'avère que l' environnement Vagrant WordPress de base n'est pas vraiment configuré pour gérer plusieurs versions de PHP, mais la boîte Wordpress de base pourrait l'être si vous ajustez la tâche PHP . J'ai pensé que je laisserais un shell d'un script qui aurait géré plusieurs versions de 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

0

Avez-vous regardé ça?

marionnette

Si apparaît pour vous aider à créer des fichiers de configuration. Il semble que vous puissiez configurer plusieurs vhosts et lui faire exécuter des commandes personnalisées après l'initialisation. Vous pouvez donc configurer tous les dossiers, hôtes et bases de données, puis copier vos versions souhaitées avec les fichiers wp-config associés? Un peu de configuration au départ, mais pourrait fonctionner.

J'utilise moi-même un script shell. wp-install www.domain.com

Actuellement, cela ne fonctionne que pour une seule installation, mais il ne serait pas impossible de le configurer en prenant quelques arguments ou un fichier de configuration supplémentaire, alors configurez plusieurs vhosts. Comme vous l'avez mentionné Vagrant, je suppose que ce qui précède est plus proche de répondre à vos besoins.

Bonne chance!


Si je ne me trompe pas, PuPHPet ne peut pas faire PHP 5.2 et 5.3, il sera donc toujours limité en tant qu'environnement de test.
Borek Bernard

0

Tout dépend de ce que vous souhaitez utiliser et du type de système d'exploitation avec lequel vous allez développer ...

Pour vagrant, voici l'automatisation pour la configuration avec VVV: https://github.com/bradp/vv

Et quelques autres construits sur vagrant:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Cependant, je suggère d'essayer le panthéon . Il vous permet de faire tout cela gratuitement et a une intégration avec wp-cli, git, behat, etc. Il existe d'autres plates-formes hébergées qui ont ces fonctionnalités telles que https://www.appfog.com/ et même wpengine je crois.

Cela dépend aussi de la quantité que vous souhaitez configurer dès le départ. Si vous cherchez seulement un moyen rapide de configurer wordpress, il y a des tonnes de scripts sur github comme celui-ci ou utilisez simplement wp-cli.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.