我尝试使用Jenkins调用以下盐脚本:
create_script:
file.managed:
- name: /tmp/broc/import_props.sh
- source: salt://projects/broc/jboss/files/import.sh.jinja
- template: jinja
Import_properties:
cmd.script:
- name: /tmp/broc/import.sh
- cwd: /tmp/broc`
Jenkins控制台输出为:
`ID: create_script
Function: file.managed
Name: /tmp/broc/import.sh
Result: True
Comment: File /tmp/broc/import.sh updated
Started: 11:31:13.736928
Duration: 166.319 ms
Changes:
----------
diff:
New file
mode:
0644
ID: Import_properties
Function: cmd.script
Name: /tmp/broc/import.sh
Result: False
Comment: Command '/tmp/broc/import.sh' run
Started: 11:31:13.903378
Duration: 399.825 ms
Changes:
----------
pid:
8292
retcode:
1`
Jenkins取得了成功:
`Succeeded: 21 (changed=22)
Failed: 1
Total states run: 22
Total run time: 30.338 s"}}]
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS`
我的问题是一个盐堆作业ID Import_properties,结果为False。因此,Jenkins构建也应该以失败告终。在上述情况下,saltstack结果将被忽略并建立成功的SUCCESS。有没有一种方法可以根据saltstack结果使詹金斯构建失败?
我看到了下面的詹金斯管道: `尝试{ saltCmd =“ \”盐-E \“($ target)\” \ state.apply projects.alip.process-server \ 支柱= \'{\“ region \”:\“ $ {Region} \”,\“ siteid \”:\“ $ {SiteID} \”,\“ dbuser \”:\“ $ {DBUSER} \”, \“ dbpass \”:\“ $ {DBPASS} \”} \'\“”
result = salt authtype: 'pam',
clientInterface: local(
arguments: saltCmd,
blockbuild: true,
function: 'cmd.run',
target: "$my_salttarget",
saveFile: true,
targettype: 'glob'),
credentialsId: "$my_saltcred",
servername: "$my_saltserver"
}
}catch(e){
result = e.toString()
currentBuild.result = 'FAILURE'
}finally{
echo result.replace("\\n",'\n')
}
}`
我是Jenkins管道脚本的新手,您可以帮忙建议一些输入,以便最终在Jenkins控制台输出下添加后期构建步骤,以解析Jenkins控制台输出,识别字符串,如果匹配则标记构建失败。这类似于文本查找器插件,只不过我们编写了管道脚本。
答案 0 :(得分:0)
即使您的状态失败,詹金斯也认为它引发的盐命令仍然可以成功执行。
Jenkins无法检测盐本身内部的错误。 它只能判断盐是否成功运行。
这与您运行salt命令行时相同。即使状态失败,shell命令salt仍会返回0。
答案 1 :(得分:0)
您的问题是(如其他人所说)归因于詹金斯使用了返回代码(如果salt命令本身),而不是您所应用的状态采取的操作的返回代码。
我这里的2美分是
--retcode-passthrough
您可以将其传递给salt命令的选项。
此选项允许salt命令返回代码与国家采取的行动相匹配。
简而言之,如果任何状态失败,那么salt命令将返回失败返回码。
官方文档here