Choix version de PHP

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment sélectionner une version de PHP dans Jenkins.

Mise en œuvre

Avec la variable d'environnement $PATH

Dans le cadre d'une utilisation multiple des versions de PHP, il est nécessaire de pouvoir indiquer aux jobs Jenkins quelle version de PHP utiliser pour le build.

A ce titre, le plugin Environment Injector a été installé.

Pour indiquer à un projet Jenkins quel version de PHP utiliser, se rendre sur le projet en question et cliquer sur Configurer :

Jenkins - Projet

Dans la configuration du projet, se rendre dans la section Environnements de Build et cliquer sur Inject environment variables to the build process :

Jenkins - Projet - Environnements de Build

Dans la section précédemment ouverte, dans le champ Properties Content, définir le PATH comme ceci : /local/php/php7/bin:$PATH. Dans cet exemple, le chemin des binaires PHP 7 a été mis devant la variable $PATH. De ce fait, en cas de présence déjà existante de chemins d'autres versions de PHP, ce sera celui de PHP 7 qui prévaudra.

Jenkins - Projet - Properties Content

Pour tester et vérifier la bonne prise en compte, dans la section Build, ajouter une étape Exécuter un script shell et renseigner les lignes suivantes :

which php
composer -v
Jenkins - Projet - Build - Shell

Cliquer sur Sauver :

Jenkins - Projet - Sauver

Lancer ensuite un build en cliquant sur Lancer un build :

Jenkins - Projet - Lancer build

Un build supplémentaire apparaît dans la section Historique des builds :

Jenkins - Projet - Historique des builds

Cliquer sur le dernier build puis cliquer sur Console Output pour afficher le détail :

Jenkins - Projet - Détail build

Cela affiche la sortie de la console avec le résultat des commandes définies plus haut dans la section Exécuter un script shell

Jenkins - Projet - Build - Sortie console

La version de PHP utilisé est bien la 7, comme défini plus haut, et Composer est fonctionnel.

Avec Gradle via du Groovy

Lors de son installation, Jenkins est livré avec 3 outils globaux configurables : Maven, Gradle et JDK.

Ces outils offrent des possibilités intéressantes, qui sont difficiles à mettre en oeuvre pour du PHP. De ce fait, pour charger les binaires de PHP selon la version souhaitée, il est possible de galvauder Gradle.

Côté administration Jenkins

Aller dans l'administration Jenkins puis dans Configuration globale des outils.

Dans la section Gradle, cliquer sur Ajouter Gradle pour ajouter une version de PHP :

Jenkins - Ajouter Gradle

Nommer le champ name PHP suivi de la version majeure concernée, définir GRADLE_HOME sur la localisation du répertoire d'installation de la version de PHP et décocher Install automatically :

Jenkins - Ajouter Gradle - PHP

Répéter l'action autant de fois que de versions différentes de PHP désirées et cliquer sur Enregistrer.

Cette action aura pour effet de rajouter dans le PATH le dossier bin d'une version de PHP lorsqu'elle sera appelée via un script Groovy.

Côté utilisation Jenkins

Lors de la création/modification d'un job Jenkins au travers d'un script Groovy, pour définir la version de PHP à utiliser, il suffit d'appeler l'outil gradle correspondant à la version de PHP à utiliser. Cela se fait dans la section tools, après la déclaration de l'agent, au début du script. Exemple pour utiliser PHP en version 7 :

pipeline {
    agent any
    tools {
        gradle 'PHP7'
    }

    stages {
        stage('Test appel PHP') {
            steps {
                sh '''
                php -v
                which php
                echo $PATH
                composer --version
                '''
            }
        }
    }
}

Cela aura pour effet de produire la sortie suivante :

...
[workspace] Running shell script
+ php -v
PHP 7.2.19 (cli) (built: Jul 25 2019 16:09:54) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
+ which php
/local/php/php7/bin/php
+ echo /local/php/php7/bin:/local/php/php7/bin:/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/MAVEN_3.5.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/local/mysql/5.6.23/bin:/local/mysql/5.6.23/share/mysql:/home/tools/bin:/usr/lib/oracle/10.2.0.4/client64/bin:/local/www/2.4.12/bin/:.
/local/php/php7/bin:/local/php/php7/bin:/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/MAVEN_3.5.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/local/mysql/5.6.23/bin:/local/mysql/5.6.23/share/mysql:/home/tools/bin:/usr/lib/oracle/10.2.0.4/client64/bin:/local/www/2.4.12/bin/:.
+ composer --version
Composer version 1.5.2 2017-09-11 16:59:25
...