Comment faire pour que Jenkins 2.0 exécute une commande sh dans le même répertoire que la caisse?
Voici mon Jenkins 2.x pipeline:
node ('master'){
stage 'Checkout'
checkout scm
stage "Build Pex"
sh('build.sh')
}
quand j'exécute ce pipeline, le check-out met le code dans l'espace de travail comme prévu, cependant au lieu de s'attendre à trouver le script dans l'espace de travail/ (il est vraiment là!), il regarde 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 modifier ce fichier Jenkinsfile pour que build.sh est exécuté dans le répertoire exact où j'ai vérifié le code source du projet?
4 réponses
vous pouvez inclure vos actions dans dir
bloc.
checkout scm
stage "Build Pex"
dir ('your new directory') {
sh('build.sh')
}
...
your new directory
est titulaire d'emplacement de votre répertoire. Par défaut, c'est un chemin relatif vers l'espace de travail. Vous pouvez définir le chemin absolu, si vous êtes sûr qu'il est présent sur l'agent.
la raison pour laquelle votre script ne fonctionne pas est parce que "build.sh" n'est pas sur votre chemin.
le fichier Jenkinsfile exécute un script "sh", dont le contenu entier est la chaîne build.sh
. parent script est dans le répertoire" @tmp "et sera toujours là - le répertoire" @tmp " est L'endroit où Jenkins garde le fichier Jenkinsfile, essentiellement, pendant une exécution.
Pour corriger le problème, modifiez votre ligne sh "./build.sh"
ou sh "bash build.sh"
, ainsi que sh
bloc dans le fichier Jenkinsfile peut localiser correctement le build.sh
script que vous souhaitez exécuter.
j'ai le même problème et le dir n'aide pas, peut-être parce que je travaille dans un sous-répertoire du dir tmp lui-même (pour une raison qui n'est pas pertinente ici). Mon code ressemble à ceci
dir(srcDir){
sh 'pwd; la -l; jenkins.sh "build.sh"'
}
(pwd
et la -l
les instructions ont été ajoutées juste pour le débogage. Le problème existe avec eux.) Avec eux-je obtenir une sortie de la forme:
+ pwd
/jenkins/workspace/aws-perf-test@tmp/repos/2
+ ls -l
total 72
-rw-r--r-- 1 jenkins jenkins 394 May 19 12:20 README.md
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 api-automation
-rwxr-xr-x 1 jenkins jenkins 174 May 19 12:20 build-it.sh
-rwxr-xr-x 1 jenkins jenkins 433 May 19 12:20 build-release.sh
-rwxr-xr-x 1 jenkins jenkins 322 May 19 12:20 build.sh
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-core
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-java-client
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-rest-models
drwxr-xr-x 4 jenkins jenkins 4096 May 19 12:20 ix-service
drwxr-xr-x 7 jenkins jenkins 4096 May 19 12:20 ixternal
drwxr-xr-x 5 jenkins jenkins 4096 May 19 12:20 ixtraneous-stuff
-rwxr-xr-x 1 jenkins jenkins 472 May 19 12:20 jenkins.sh
-rw-r--r-- 1 jenkins jenkins 16847 May 19 12:20 pom.xml
+ jenkins.sh build.sh
/home/jenkins/workspace/aws-perf-test@tmp/repos/2@tmp/durable-a3ec0501/script.sh: line 2: jenkins.sh: command not found
j'ai fait ceci:
dir(srcDir){
sh 'cdr=$(pwd); $cdr/jenkins.sh "build.sh"'
}
Jenkins créer un dossier quand il fait un clone de votre projet comme ceci:
/var/lib/jenkins/espace de travail/emploi-nom @script
pour que cela fonctionne, vous devez définir le fichier comme exécutable si vous êtes dans un environnement linux et ensuite appeler le script shell.
quelque Chose comme ceci:
// Permission to execute
sh "chmod +x -R ${env.WORKSPACE}/../${env.JOB_NAME}@script"
// Call SH
sh "${env.WORKSPACE}/../${env.JOB_NAME}@script/script.sh"