我正在尝试将我的Scripted管道转换为声明性管道.想知道如何在steps {}块内部执行简单的if语句.
stage ('Deploy to Docker') {
steps {
parallel (
"instance1" : {
environment {
containerId = sh(script: "docker ps --quiet --filter name=${fullDockerImageName}", returnStdout: true).trim()
}
steps {
if (containerId.isEmpty()) {
docker.image('some/image').run("--name ${fullDockerImageName}")
}
}
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下异常:
WorkflowScript: 201: Expected a step @ line 201, column 29.
if (containerId.isEmpty()) {
Run Code Online (Sandbox Code Playgroud)
既然我不允许if(..)在一个steps {}块内做一个简单的内容,任何关于如何做到这一点的想法?
when {}因为在一个简单的阶段中发生了更多的步骤(如果它存在则启动已停止的容器等),这似乎没有意义,因为在一个简单的阶段中会发生更多的步骤.
做一个简单的if的最佳方法是什么?
如何在执行过程中跳过 Jenkins 阶段?一旦确定了跳过条件,这就像when在某些步骤之后或步骤中间使用一样。我知道我可以进一步分解阶段/步骤并使用全局变量来实现此目的,但似乎应该有一种更简单的方法。
该步骤应该显示为已跳过,而不是失败或不稳定。
stage('Builds') {
failFast true
parallel {
stage('FlagA') {
steps {
BuildWithFlag("FlagA")
}
}
stage('FlagB') {
steps {
BuildWithFlag("FlagB")
}
}
...
void BuildWithFlag(String flag) {
skipCondition = false
<setup-steps>
if(skipCondition) {
currentStage.result = '' // Doesn't work
return
}
<build-steps>
}
Run Code Online (Sandbox Code Playgroud)
相关:
Jenkins 管道中的条件步骤/阶段
如何在声明性管道中执行 when..else
Jenkins 管道阶段跳过基于管道中定义的常规变量
所有这些都when在阶段开始时使用。我需要在一个步骤中模仿它。