Script Vagrant per configurare tutte le comuni combinazioni di versioni di PHP / WordPress


9

Sto cercando un modo per impostare rapidamente e ripetutamente l' ambiente di test / debug per il nostro plugin, molto probabilmente usando Vagrant . Progetti come VVV si concentrano su una configurazione a singolo ambiente (o, un paio di ambienti come stable / trunk) mentre quello che sto cercando è uno script che configuri ambienti come:

  • wp39-php52.local
  • WP40-php52.local
  • wp41-php52.local
  • wp39-php53.local
  • WP40-php53.local
  • ecc. (ti viene l'idea)

C'è una cosa del genere? Il più vicino che ho trovato è WordPress Vagrant Boxes che almeno fa le versioni di PHP ma forse c'è qualcosa di più completo che aggiunge anche versioni di WordPress al mix. Grazie.


Probabilmente hai familiarità con Travis CI . C'è uno script che ti permetterà di testare varie versioni di WordPress e PHP nella tua build di Travis . Ovviamente, essere in grado di impostare qualcosa di simile a livello locale sarebbe meglio per alcuni scopi di debug. Non conosco una sceneggiatura di Vagrant. So che Travis usa phpenvper gestire le diverse versioni di PHP. Forse una combinazione di questo e un checkout SVN dell'intero repository WordPress (che conterrebbe tutte le versioni sotto /tags) sarebbe un inizio?
JD

1
Che mi dici di Docker ? È possibile creare immagini con ambienti diversi e quindi creare / eseguire contenitori con Dockerfile
rafawhs

@rafawhs Yep Docker è ciò che prenderei in considerazione oggi.
Borek Bernard,

Risposte:


1

Per quanto riguarda WordPress, Basic WordPress Vagrant Environment è pronto per funzionare con qualsiasi versione di WordPress (con un piccolo aiuto). Avresti ancora bisogno di trovare un modo per configurare il PHP ma c'è un suggerimento in https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Per usarlo fuori dalla scatola; Scarica o clona il progetto wplatest-php55.dev/ed eseguilovagrant up

L'installazione di Vagrant Host Manager collegherà automaticamente l'IP alla tua cartellahttp://wplatest-php55.dev/

Generare più ambienti dalle versioni di WP tramite install-wp.sh

Controlla l'archivio per possibili versioni di 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

Ecco uno script che tira il master dell'ambiente Vagrant nella directory dello script bash, clona un sito per ogni versione dell'array, configura l'attività di installazione per utilizzare quella versione WP e consente di specificare un file / cartella da copiare in tutti i siti prima tu vagrant up.

Inseriscilo in un file, install-wp.shquindi eseguilo chmod +x install-wp.shper renderlo eseguibile. Trova una cartella in cui desideri creare tutte queste caselle ed eseguirla ./install-wp.sh. Genererà la struttura sopra.

Dato che vuoi testare il tuo plugin in tutte le versioni, crea una cartella nella stessa directory dello script, wp-content/plugins/your-pluginquindi esegui install-wp.sh wp-content. Il file / cartella viene copiato nella radice di ciascun sito, motivo per cui suggerisco 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!"

Aggiornare:

Si scopre che l' ambiente Vagrant di WordPress di base non è realmente configurato per gestire più versioni di php, ma la casella di base di Wordpress potrebbe essere se si regola l' attività PHP . Ho pensato che avrei lasciato una shell di uno script che avrebbe gestito più versioni 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

Hai visto questo?

puphpet

Se sembra aiutarti a creare file di configurazione. Sembra che tu possa impostare più vhosts e fargli eseguire comandi personalizzati post-init. Quindi potresti aver impostato tutte le cartelle, host e database e quindi copiare le versioni desiderate con i file wp-config associati? Un po 'di installazione iniziale, ma potrebbe funzionare.

Uso uno script di shell, me stesso. wp-install www.domain.com

Attualmente funziona solo per un'installazione, ma non sarebbe impossibile configurarlo, accetta alcuni argomenti o un file 'config' aggiuntivo, quindi imposta più host. Come hai detto Vagrant, suppongo che quanto sopra è più vicino a soddisfare le tue esigenze.

In bocca al lupo!


Se non sbaglio PuPHPet non può fare PHP 5.2 e 5.3, quindi sarà sempre limitato come ambiente di test.
Borek Bernard,

0

Tutto dipende da cosa vuoi usare e da quale tipo di sistema operativo svilupperai con ...

Per Vagrant, ecco l'automazione per la configurazione con VVV: https://github.com/bradp/vv

E un paio di altri basati su Vagrant:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Tuttavia, suggerisco di provare il pantheon . Ti permette di fare tutto questo gratuitamente e ha l'integrazione con wp-cli, git, behat, ecc. Ci sono altre piattaforme ospitate che hanno queste caratteristiche come https://www.appfog.com/ e persino wpengine credo.

Dipende anche da quanto vuoi impostare dall'inizio. Se stai solo cercando un modo rapido per impostare wordpress, ci sono tonnellate di script su github come questo o semplicemente usi wp-cli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.