Jenkins中使用salt state文件时,为什么IF语句会失败?

77次阅读
没有评论

问题描述

在Jenkins的流水线中调用了一个saltstack state文件”init.sls”,如下所示。如果job == Yes,则期望执行test_commandtest_final,否则如果job == No,则执行test2_commandtest_final

{% if {{ job }} == 'Yes' %}
test_command:
  cmd.run:
    - name: echo "TEST COMMAND EXEC"
{% elif {{ job }} == 'No' %}
test2_command:
  cmd.run:
    - name: echo "TEST2 COMMAND EXEC"
{% endif %}
test_final:
  cmd.run:
    - name: echo "FINAL SUCCESS"

然而,执行不成功。是否有更好的方法来执行salt state文件?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1,jinja语法错误是由于在job变量周围的{{}}引起的。在jinja块内部,不需要这些花括号,因为已经有了{% %}标记。
所以,要使代码正常工作,只需将{{ job }}替换为job即可。
以下是修改后的代码:

{% if job == 'Yes' %}
test_command:
  cmd.run:
    - name: echo "TEST COMMAND EXEC"
{% elif job == 'No' %}
test2_command:
  cmd.run:
    - name: echo "TEST2 COMMAND EXEC"
{% endif %}
test_final:
  cmd.run:
    - name: echo "FINAL SUCCESS"

这样应该可以正常工作。

方案2

如果你仍然遇到问题,可以尝试使用其他方法来执行salt state文件。以下是一种可能的方法:
1. 在Jenkins流水线中,使用sh命令执行salt命令行工具。
2. 使用salt命令行工具执行salt state文件。
以下是一个示例Jenkins流水线脚本:

pipeline {
  agent any
  stages {
    stage('Execute Salt State') {
      steps {
        sh 'salt-call state.apply your_state_file'
      }
    }
  }
}

在上面的示例中,我们使用sh命令执行了salt-call state.apply命令,来执行指定的salt state文件。
请注意,你需要将your_state_file替换为你实际的state文件名。
这种方法可以提供更多的灵活性和控制权,以执行salt state文件。

总结

在Jenkins中使用salt state文件时,如果IF语句失败,可能是由于jinja语法错误引起的。要解决这个问题,需要注意jinja语法,并确保正确使用变量。如果问题仍然存在,可以尝试使用其他方法来执行salt state文件,如使用salt命令行工具。

正文完