Ansible读取Jenkins布尔参数

Ansible读取Jenkins布尔参数,jenkins,ansible,Jenkins,Ansible,我有来自Jenkins的布尔参数输入。然后,我的Ansible将此布尔值读取为执行任务的“何时”条件。但是,此布尔参数似乎无法正常工作。我的剧本是这样的: - hosts: localhost var: my_boolean: {{lookup('env','boolean_parameter1')}} - name: print msg1 debug: msg: "msg1 is {{lookup('env','boolean_parameter1')}}

我有来自Jenkins的布尔参数输入。然后,我的Ansible将此布尔值读取为执行任务的“何时”条件。但是,此布尔参数似乎无法正常工作。我的剧本是这样的:

- hosts: localhost
  var: 
    my_boolean: {{lookup('env','boolean_parameter1')}}

- name: print msg1
  debug:
    msg: "msg1 is {{lookup('env','boolean_parameter1')}}."

- name: print msg2
  debug:
    msg: "msg2 is {{my_boolean}}."

- name: execute tasks if my_boolean is 'true'
  shell: ls -l
  when:
    - "{{my_boolean}}"=="true"
输出:
msg1为真。
msg2是。

为什么msg2将my_boolean输出为空?这也应该是“真的”吗?

在您的游戏中,当:与字符串
匹配时,
中的比较是“真的”
。而变量
my_boolean
是一个布尔值,因此它不匹配并跳过任务。在
调试:
任务中,情况正好相反-消息试图显示布尔值
true
,因此为空

以下任务应完成此工作:

#这里我们需要布尔值的字符串等价物,即文本“true”
-名称:打印msg2
调试:
msg:“msg2是{{my_boolean}字符串}。”
#但是这里我们需要比较布尔值
-名称:如果我的布尔值为“true”,则执行任务
外壳:ls-l
何时:我的妈妈

值得注意的是,从Ansible 2.10开始,当:
条件句将被弃用时,在
中引用条件句。最好使用:
when:my_boolean | bool

尝试在初始化期间将
my_boolean
强制转换为bool。这只允许检查
my_boolean
的值是否为真

使用您的代码时,以下内容对我有效:

- name: Test
  hosts: all
  vars:
    my_boolean: "{{lookup('env','boolean_parameter1')|bool}}"
  tasks:
    - name: print msg1
      debug:
        msg: "msg1 is {{lookup('env','boolean_parameter1')}}."

    - name: print msg2
      debug:
        msg: "msg2 is {{my_boolean}}."

    - name: execute tasks if my_boolean is 'true'
      shell: ls -l
      when:
        - my_boolean
库存:

[hosts]
localhost ansible_connection=local
[hosts]
localhost ansible_connection=local