44 votes

Comment faire pour que Jenkins 2.0 exécute une commande sh dans le même répertoire que le checkout ?

Voici mon pipeline Jenkins 2.x :

node ('master'){
    stage 'Checkout'
    checkout scm
    stage "Build Pex"
    sh('build.sh')
}

Lorsque j'exécute ce pipeline, le checkout place le code dans le workspace comme prévu, mais au lieu de s'attendre à trouver le script dans workspace/ (il y est vraiment !), il cherche dans un répertoire sans rapport : workspace@tmp/durable-d812f509.

Entering stage Build Pex
Proceeding
[Pipeline] sh
[workspace] Running shell script
+ build.sh
/home/conmonsysdev/deployments/jenkins_ci_2016_interns/jenkins_home/jobs/pex/branches/master/workspace@tmp/durable-d812f509/script.sh: line 2: build.sh: command not found

Comment puis-je modifier ce fichier Jenkins pour que build.sh soit exécuté dans le même répertoire que celui où j'ai extrait le code source du projet ?

0 votes

C'est vraiment votre pipeline complet ? Ou avez-vous de multiples node des blocs ?

3 votes

Pour l'instant, c'est tout. C'est le plus petit pipeline qui démontre le bug.

0voto

tbradt Points 73

J'ai pu faire fonctionner mon exécution de script avec un dérivé simplifié de la réponse de Rafael Manzoni. Je me suis interrogé sur toute la chose "JOB_NAME@script" et j'ai trouvé cela inutile, au moins pour le déclaratif en utilisant notre version de Jenkins. Il suffit de définir les autorisations d'accès sur l'espace de travail. Pas besoin d'aller plus loin que ça.

stage('My Stage') {
    steps {
        sh "chmod +x -R ${env.WORKSPACE}"
        sh "./my-script.sh"
    }
}

0voto

EliteRaceElephant Points 655

Utilisez le GIT_CHECKOUT_DIR variable d'environnement

Jenkinsfile :

pipeline {
  agent any
  stages {
    stage('Install dependencies') {
      steps {
        dir(GIT_CHECKOUT_DIR) {
          // now everything is executed in your checkout directory
          sh 'yarn'
        }
      }
    }
  }
  post {
    // ...
  }
}

Définissez votre GIT_CHECKOUT_DIR lors de la mise en place de votre pipeline. Voir ce qui suit pregunta : pipeline-checkout-dir

Liste d'autres variables d'environnement :

  • ${YOUR_JENKINS_HOST}/env-vars.html
  • exemple : http://localhost:8000/env-vars.html

La réponse la plus votée est "dangereux et fragile". Il n'est pas nécessaire d'utiliser des PATH ABSOLUS statiques dépendant du système d'exploitation à de multiples endroits qui cassent vos constructions dès que vous changez de machine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X