Jas*_*oel 24 jenkins jenkins-pipeline jenkinsfile
我正在尝试将我的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的最佳方法是什么?
Jon*_*n S 15
不幸的是,你现在必须把它包装成一个script
.正如它在这里所说 ;
声明性管道可以使用" 管道步骤"参考中记录的所有可用步骤,其中包含完整的步骤列表,并添加下面列出的步骤,这些步骤仅在声明性管道中受支持.
如果您查看步骤参考,它只会列出所有有助于管道步骤的插件.而据我所知,没有步骤支持,否则,否则.所以答案是,不,现在它是不可能的,但是,实现它作为一个步骤并添加到插件应该相当简单.
小智 12
这应该工作
pipeline {
stages {
stage ('Main Stage') {
steps {
script {
if (true) {
stage ('Stage 1') {
sh 'echo Stage 1'
}
}
if (false) {
stage ('Stage 2') {
sh 'echo Stage 2'
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是在 Jenkins 声明式管道中使用 if/else 或控制逻辑的最正确/最佳实践方式。
https://jenkins.io/doc/book/pipeline/syntax/#when
@IronSean 回答,您似乎不再需要该插件了。
归档时间: |
|
查看次数: |
41140 次 |
最近记录: |