关于groovy:jenkins dsl中的booleanParam

booleanParam in jenkins dsl

我有一个这样的詹金斯绝妙剧本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    freeStyleJob("test") {
        properties { githubProjectUrl(‘…’) }
        description(‘’’job description’’’.stripMargin('|'))

        logRotator{ numToKeep(100) }

        parameters {
            stringParam(’STRINGP1’,"","STRINGP1 description")
            stringParam('STRINGP2’,"","StringP2 description")
            booleanParam(‘b1’, false)
            booleanParam(‘b2’, false)
            booleanParam(‘b3’, false)
            stringParam("EMAIL_LIST","","Emails")
        }

        scm {
            github(‘repo’, '
${STRINGP1}', 'git', ‘giturl’)
        }

        steps {
            shell '
''|#!/bin/bash
                |ARGS=""
                |fi
                |if [[${b1}]]; then
                |   ARGS=$ARGS" —-p b1"
                |fi
                |if [[${b2}]]; then
                |   OS_ARGS=$ARGS" —-p b2"
                |fi
                |if [[${b3}]]; then
                |   ARGS=$ARGS" —-p b3"
                |fi                
                |echo ${ARGS}'''.stripMargin('|')

        }

        publishers {
            archiveArtifacts {
                pattern(‘pattern’)
            }

            extendedEmail {
                ....
                }
            }

        }

    ....
  }

在创建作业之后,无论用户是否选中或取消选中UI中的布尔参数,args的值都将始终为"-p b1--p b2--p b3"。这意味着shell脚本中存在的三个if将始终计算为true。为什么会这样?


参数可从envparams获得。当你以$b1的身份访问它们时,你是从env而不是从params获取它们。

所有环境变量都是字符串,因此当您将参数作为环境变量访问时,它们始终是字符串。

如果要在键入时访问它们,请使用params

1
2
3
4
script {
  assert env.b1 instanceof String
  assert params.b1 instanceof Boolean
}

至少对于管道脚本,布尔参数在实际字符串中。所以我要做以下的事情:

1
parameterAsBoolean = (MY_PARAMETER =="true")


您试过独立运行shell脚本吗?只是为了确保它按你的意愿运行?

我认为您的语法可能错误,您的值将始终有效,因为它们存在,请检查此值作为参考:如何在shell脚本中声明和使用布尔变量?