5 votes

Script Bash si condition ne fonctionne pas lorsqu'il est appelé depuis un pipeline Jenkins

Voici la scène de mon pipeline Jenkins

stage ('Import') {

            steps {
                sshagent([sshCredentials]) {
                    sh '''
                        #!/bin/bash
                        sh -x ETL_AUTOMATION/Scripts/export.sh
                    '''

Sortie de construction :-

[[ RMO_TST12 ==  ]]

ETL_AUTOMATION/Scripts/export.sh: 17: ETL_AUTOMATION/Scripts/export.sh: [[: not found

if condition dans le script :-

if [[ "$SOURCE_FOLDER" == "" ]]; then

    echo "SOURCE_FOLDER not specified... exiting"
    exit 1
fi

J'ai mentionné #!/bin/bash dans mon script aussi.

Veuillez m'aider, je suis vraiment bloqué ici.

10voto

Stewart Points 1385

Vous exécutez sh -x ETL_AUTOMATION/Scripts/export.sh. Cela signifie que export.sh est exécuté par sh et non par bash. Sur Ubuntu, sh est un simple shell POSIX appelé dash qui ne supporte pas la construction [[, qui est une chose de bash. Alors changez simplement votre script pour qu'il soit lancé avec bash au lieu de sh. Je ne connais pas du tout la syntaxe de Jenkins, mais je suppose que vous voulez l'une de ces options :

sshagent([sshCredentials]) {
    sh '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

ou, si votre export.sh n'est pas exécutable :

sshagent([sshCredentials]) {
    sh '''
        bash ETL_AUTOMATION/Scripts/export.sh
        '''

Ou peut-être simplement :

sshagent([sshCredentials]) {
    bash '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

Alternativement, vous pouvez modifier export.sh pour qu'il n'utilise pas les fonctionnalités exclusives de bash :

if [ -z $SOURCE_FOLDER ]; then
    echo "SOURCE_FOLDER non spécifié... sortie"
    exit 1
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X