Comment ré-utiliser précédemment créé de l'espace de travail à travers les étapes
Je suis confronté à un problème où j'ai deux étapes définies dans mon pipeline que les deux sont exécutés sur le même nœud et doivent être exécutés dans le même espace de travail.
La première de ces étapes s'exécute sur mon nœud maître au début, mais vers la fin des étapes définies a pour unstash quelques fichiers sur un autre nœud.
La deuxième étape a alors plus qu'à continuer sur mon maître, et s'appuie sur certains modules ont été installés à partir de la première étape.
Voici mon pipeline pour mieux expliquer:
#!groovy
pipeline {
agent { label 'master' }
stages {
stage('Build') { //1. Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
steps {
sh '''
npm install
bower install
gulp set-staging-node-env
gulp prepare-staging-files
gulp webpack
'''
stash includes: 'dist/**/*', name: 'builtSources'
stash includes: 'config/**/*', name: 'appConfig'
node('Protractor') { //2. Running on vnccentos7 in /var/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
dir('/opt/foo/deploy/') {
unstash 'builtSources'
unstash 'appConfig'
}
}
}
}
stage('Unit Tests') {
agent { label 'master' } //3. Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2
steps {
parallel (
"Jasmine": {
sh 'gulp karma-tests-ci'
},
"Mocha": {
sh 'gulp mocha-tests'
}
)
}
}
}
}
Comme vous pouvez le voir, j'ai ajouté des commentaires au début de chaque scène\nœud utilisé pour montrer l'jenkins sortie que je vois pour que les espaces de travail sont alloués.
Le problème, je suis confronté est que les Tests Unitaires étape échoue, il essaie d'utiliser certains nœud de modules qu'il ne peut pas trouver. Ceux-ci sont présents dans le premier espace de travail qui vient d'être créé qui est l'endroit où je veux ce stade, de continuer à l'utiliser, afin de ne pas à l'aide d'un nouveau '@2' suffixé de l'espace de travail.
Est-il un moyen de dire à l'Jenkins pour préserver déjà créé des espaces de travail dans le pipeline?
MODIFIER
Je suppose que j'ai spécifié agent {label:'master'}
de nouveau dans ma prochaine étape, c'est ce cas, un nouvel espace de travail pour obtenir créé? Dois-je utiliser l' node
approche à la place? Serait-ce que le même espace de travail pour s'habituer?
En fait, j'ai essayé d'utiliser node('master'){...}
autour de chacune des étapes dans mes Tests Unitaires étape, mais il reste encore à utiliser le @2 suffixé espace de travail plutôt que de l'original.
J'ai vu d'autres threads de parler de la façon dont vous devriez ne pas ré-utiliser le même espace de travail que vous pouvez rencontrer des problèmes avec les verrous de fichier. Ils suggèrent plutôt de l'archive\réactivation de l'espace de travail entre les étapes.
J'ai vu aussi des approches dans lequel vous pouvez stocker le chemin d'accès de l'espace de travail dans une variable et utiliser cela plus tard sur ce qui semble bon pour mon cas, mais je nai pas trouvé de syntaxe déclarative échantillons, groovy.
EDIT 2
Maintenant, j'ai essayé quelques méthodes impliquant l'économie de l'allocation d'un espace de travail à partir de la première étape dans une variable et de l'aide dans un ws(...)
directive dans les étapes ultérieures:
pipeline {
agent { label 'master' }
stages {
stage('Build') {
steps {
script {
def workspace = pwd()
}
sh '''
npm install
bower install
gulp set-staging-node-env
gulp prepare-staging-files
gulp webpack
'''
stash includes: 'dist/**/*', name: 'builtSources'
stash includes: 'config/**/*', name: 'appConfig'
node('Protractor') {
dir('/opt/foo/deploy/') {
unstash 'builtSources'
unstash 'appConfig'
}
}
}
}
stage('Unit Tests') {
steps {
parallel (
"Jasmine": {
node('master') {
ws("${workspace}"){
sh 'gulp karma-tests-ci'
}
}
},
"Mocha": {
node('master') {
ws("${workspace}"){
sh 'gulp mocha-tests'
}
}
}
)
}
post {
success {
sh 'gulp combine-coverage-reports'
sh 'gulp clean-lcov'
publishHTML(target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: false,
reportDir: 'test/coverage',
reportFiles: 'index.html',
reportName: 'Test Coverage Report'
])
}
}
}
}
}
J'ai essayé de retirer le deuxième agent de déclaration de l'Unité de Tests stade, mais la scène est restée sur ma Rapporteur nœud qui je n'ai pas envie de faire. Donc, après les réponses\commentaires ici, j'ai ensuite utilisé nœud blocs autour de chacune de mes étapes et utilisé le ws blocs comme vous pouvez le voir,
L'étape échoue, et je peux le voir dans les journaux que ce n'est pas à l'aide de l'espace de travail allouée à partir de la première étape (sans le @ suffixes):
[Jasmine] Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2
[Pipeline] [Jasmine] {
[Pipeline] [Jasmine] ws
[Jasmine] Running in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2@2
[Pipeline] [Jasmine] {
[Pipeline] [Jasmine] sh
[Jasmine] [_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2@2] Running shell script
[Jasmine] + gulp karma-tests-ci
[Jasmine] [08:27:01] No gulpfile found
Même sa double suffixant avec @2, donc je ne suis pas sûr de ce que sa fais maintenant.
Merci @gaoithe j'ai essayé mais ça ne marche pas revenir à mon nœud maître, il reste sur le Rapporteur, l'un après l'unstash opération. Voir mes modifications dans la question d'origine
Je ne peux pas utiliser un langage fort sur cette ressource, mais c'est un vrai PITA que Jenkins déclarative pipeline ne permet pas de faire cette chose en Février 2018. J'ai besoin d'implémenter une simple canalisation de flux de travail, comme la caisse des sources, de construire, d'exécuter une série de tests, l'exécution d'un autre, puis de combiner les rapports d'essais. Rien de compliqué, mais je ne suis pas en mesure de facilement exécuter mes étapes dans le même espace de travail. Comment c'est pas mis dans la conception des Pipelines à partir du sol? La plupart des projets doivent partager l'espace de travail entre certaines étapes. Cette issues.jenkins-ci.org/browse/JENKINS-47163 a été résolu comme dupliqué entre-temps.
OriginalL'auteur mindparse | 2017-05-30
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si cela correspond à votre cas d'utilisation, mais cet exemple de script montre comment partager le même nœud/espace de travail entre les différentes étapes & conteneurs:
https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Controlling-your-build-environment#reusing-nodeworkspace-with-per-stage-docker-agents
reuseNode true
a fait le tourOriginalL'auteur kongkoro
Utilisation
dir
au lieu dews
.ws
automatiquement modifier le préfixe "@NOMBRE" lorsque l'espace de travail pour être utilisée était déjà occupée par d'autres travail.dir
il suffit de déplacer votre répertoire de travail courant à exactement où vous avez désigné.Fonctionne bien comme vous voulez.
OriginalL'auteur Jinsoo Heo
Spécifier un espace de travail personnalisé.
À partir de la Canalisation de la syntaxe: "ws: Allouer de l'espace de travail"
. . ce travail ?
OriginalL'auteur gaoithe
Pour moi, j'ai mis le mondial de l'agent à agent "aucun", puis les phases d'utiliser le même espace de travail.
Exemple 1: à l'Aide de l'agent "none", 2 étapes de l'utilisation de l'espace de travail de certains
Exemple 2: à l'Aide d'un mondial de l'agent, 2 stades d'utiliser la différence des espaces de travail
Vous serais reconnaissant une explication des raisons pour lesquelles cela se produit. Ma conjecture est que le mondial de l'agent de l'ensemble du pipeline, si spécifié allons utiliser l ' "original" de l'espace de travail (sans @2), toute autre étape qui utilise un autre agent devra utiliser le @2 espace de travail. Donc, si aucun agent est utilisé, toutes les étapes de partager le même espace de travail
OriginalL'auteur phanhuy152
J'chose en utilisant le nœud de la syntaxe de les résoudre.
afin d'être certain que je voudrais utiliser un dir étendue à l'ensemble de l'espace de travail sur votre propre
nœud("your_slave"){ dir ("/var/lib/jenkins/${env.JOB_NAME}/"){ sh '.......' } }
OriginalL'auteur eran meiri
La Externe De L'Espace De Travail Du Gestionnaire De Plugin pourrait résoudre votre problème.
OriginalL'auteur Markus Schulte
Je suis heureux de dire que, Jenkins peut partager l'espace de travail maintenant.
Vous pouvez spécifier les étapes imbriqués dans d'autres stades de partager l'espace de travail.
La nouvelle fonctionnalité est appelée Des Étapes Séquentielles.
Je vais utiliser votre code d'origine pour la mettre en œuvre.
OriginalL'auteur ian