有时,用户需要能够选择跳到哪个阶段,而不是下一个阶段。它可以在Jenkins管道中完成吗?例如,在第一阶段之后,用户可以选择跳到哪个阶段:
节点{stage(‘one’){ sh‘echo one 'stage2’stage2| stage3 | stage4‘}stage(’two‘){ sh’echo two‘}stage(’three‘){ sh’echo three‘}stage(’four‘){ sh’echo four‘}}
发布于 2017-10-20 13:26:19
您可以在脚本化管道中做到这一点。我是在声明式中创建的,但如果您喜欢,将其反向工程为一个脚本化管道应该很容易。
基本上,您在输入中提供了choice参数,然后使用该值来确定是否应该运行stage。在脚本化管道中,您可以使用if/then、switch语句或任何数量的东西。
pipeline {
agent none
stages {
stage ('First') {
agent any
steps {
echo "First dummy stage"
}
}
stage ('Input') {
agent none
steps {
script {
myStage = input message: 'What stage do you want to run now?', parameters: [choice(choices: 'Stage1\nStage2\nStage3', description: '', name: 'Stage')]
}
echo myStage
}
}
stage('Stage1') {
when {
expression { myStage == 'Stage1' }
}
steps {
echo "Running Stage1"
}
}
stage('Stage2') {
when {
expression { myStage == 'Stage2' }
}
steps {
echo "Running Stage2"
}
}
stage('Stage3') {
when {
expression { myStage == 'Stage3' }
}
steps {
echo "Running Stage3"
}
}
}
}发布于 2017-10-20 13:00:44
您可以使用groovy来做到这一点。在Jenkinsfile中,您可以定义执行groovy脚本的条件。作为一个简化的示例,您可以这样做:
node {
if(lint == true) {
load("lint.groovy").lint()
}
if(test == true) {
load("test.groovy").test()
}
}在上面的示例中,lint.groovy包含一个具有lint阶段的lint()函数。test.groovy也是如此,它定义了一个test()函数和一个test阶段。
发布于 2017-11-08 08:39:28
谢谢你的帮助。以下是我解决的问题,我将阶段包装在if...else条件中
if (env.BRANCH_NAME == 'branch name') {
env.DEPLOY_TO_LAST = input message: 'User input required',
parameters: [choice(name: 'Deploy to LAST', choices: 'no\nyes')]
if (env.DEPLOY_TO_LAST == 'yes'){
stage('LAST') {
node('') {
sh 'echo "stage Last"'
unstash(name: 'Saved')
}
}
}
else {
stage('FIRST') {
node('') {
sh 'echo "stage FIRST"'
unstash(name: 'Saved')
}
}
stage('SECOND') {
node('') {
sh 'echo "stage SECOND"'
unstash(name: 'Saved')
}
}
stage('THIRD') {
node('') {
sh 'echo "stage THIRD"'
unstash(name: 'Saved')
}
}
}}
https://stackoverflow.com/questions/46839772
复制相似问题