在Ansible工作时如何进行更改?

在Ansible工作时如何进行更改?,ansible,Ansible,我试图在Jenkins服务器上使用命令模块运行脚本。脚本的编写方式是,如果不进行任何配置更改,则应返回0,并且不应更改Ansible任务 代码如下: - name: Script to run command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy "{{ jenkins_home }}/userContent/script.groovy"

我试图在Jenkins服务器上使用命令模块运行脚本。脚本的编写方式是,如果不进行任何配置更改,则应返回0,并且不应更改Ansible任务

代码如下:

  - name: Script to run
    command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy "{{ jenkins_home }}/userContent/script.groovy"
    register: return_code
    changed_when: return_code.stdout != 0
但是上面的代码行为总是显示为已更改

Ansible输出:

任务[詹金斯:要运行的脚本]********************************

更改:[test]=>{“changed”:true,“cmd”:[“java”、“-jar”、“/var/cache/jenkins/war/WEB-INF/jenkins cli.jar”、“-s”、“-groovy”、“/var/lib/jenkins/userContent/script.groovy”]、“delta”:“0:00:01.547098”、“end”:“2017-02-06 15:31.989134”、“rc”:0、“start”:“2017-02-06 15:31:04.442036”、“stderr”:[警告]无法使用您的SSH密钥进行身份验证。以匿名、“标准输出”:“0”、“标准输出行”:[“0”]、“警告”:[]的形式继续


您需要将
stdout
值与字符串(而不是整数)进行比较:

- name: Script to run
  command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy "{{ jenkins_home }}/userContent/script.groovy"
  register: script_call
  changed_when: script_call.stdout != "0"

您需要将
stdout
值与字符串(而不是整数)进行比较:

- name: Script to run
  command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy "{{ jenkins_home }}/userContent/script.groovy"
  register: script_call
  changed_when: script_call.stdout != "0"

“返回0”是指它打印
0
或返回代码为0?请尝试返回\u code.rc!=0.我已经试过了,但它不起作用。@techraf by return 0表示我在脚本中有一个实现,如果没有任何内容,则返回0;请尝试返回\u code.stdout!='“返回0”是指它打印
0
或返回代码为0?请尝试返回\u code.rc!=0.我已经试过了,但它不起作用。@techraf by return 0表示我在脚本中有一个实现,如果没有任何内容,则返回0;请尝试返回\u code.stdout!='你能解释一下为什么我需要在引号中加0吗。这将是一个很大的帮助。答案的第一句已经写了。您不清楚哪个词?我理解您的回答。我不清楚的是这个概念,因为它应该基于退出代码,即0而不是“0”,但我明确地问您您的意图是什么,您添加了一个日志,清楚地显示
“stdout”:“0”
,它不是退出代码,而是标准输出。如果要检查返回代码,应使用
script\u call.rc!=0
。请您详细说明我为什么需要在引号中加0。这将是一个很大的帮助。答案的第一句已经写了。您不清楚哪个词?我理解您的回答。我不清楚的是这个概念,因为它应该基于退出代码,即0而不是“0”,但我明确地问您您的意图是什么,您添加了一个日志,清楚地显示
“stdout”:“0”
,它不是退出代码,而是标准输出。如果要检查返回代码,应使用
script\u call.rc!=0