Pipeline Jenkins absolu/groovy noob ici, j'ai une scène
stage('Building and Deploying'){
def build = new Build()
build.deploy()
}
qui utilise la bibliothèque partagée, la source du Build.groovy
est ici:
def deploy(branch='master', repo='xxx'){
if (env.BRANCH_NAME.trim() == branch) {
def script = libraryResource 'build/package_indexes/python/build_Push.sh'
// TODO: Test out http://stackoverflow.com/questions/40965725/jenkins-pipeline-cps-global-lib-resource-file-for-Shell-script-purpose/40994132#40994132
env.PYPI_REPO = repo
sh script
}else {
echo "Not pushing to repo because branch is: "+env.BRANCH_NAME.trim()+" and not "+branch
}
}
Le problème est qu’en cas d’échec de la génération du rapport dans un dépôt distant (voir ci-dessous), l’étape finit toujours par réussir.
running upload
Submitting dist/xxx-0.0.7.tar.gz to https://xxx.jfrog.io/xxx/api/pypi/grabone-pypi-local
Upload failed (403): Forbidden
...
Finished: SUCCESS
Comment bouillonner le code de sortie du script shell et faire échouer l'étape?
L'étape sh
renvoie le même code d'état que votre commande sh actuelle (votre script dans ce cas). De sh documentation :
Normalement, un script qui se termine avec un code d'état différent de zéro entraînera l'échec de l'étape avec une exception.
Vous devez vous assurer que votre script renvoie un code d'état différent de zéro en cas d'échec. Si vous n'êtes pas sûr du résultat de votre script, vous pouvez vérifier la valeur de retour à l'aide du paramètre returnStatus
de l'étape sh
, ce qui n'échouera pas la construction mais renverra le code d'état. Par exemple:
def statusCode = sh script:script, returnStatus:true
Vous pouvez ensuite utiliser ce code de statut pour définir le résultat de votre construction actuelle.
Vous pouvez utiliser :
currentBuild.result = 'FAILURE'
ou currentBuild.result = 'UNSTABLE'
pour marquer le pas comme rouge/jaune respectivement. Dans ce cas, la construction continuera à traiter les étapes suivantes.error "Your error message"
si vous voulez que la construction échoue et quitte immédiatement.Je suis juste tombé par hasard sur cette question, il s’est avéré qu’il s’agissait d’un problème de version Python; je ne me souviens pas de la version exacte de Python, mais c’était un problème dans setuptools.