脚本检查命令的输出并失败或传递基于参数的jenkins构建



我有一个Jenkins作业,它对yaml文件运行策略检查,如果存在错误,则返回拒绝消息。如果返回拒绝消息,我想为作业编写一个失败的脚本。

这是命令:

opa exec "/var/lib/jenkins/workspace/open-policy-agent-test/" --config-file=/home/isw_user/opa-conf.yaml --decision /rules

这是命令的结果:

{
"result": [
{
"path": "/var/lib/jenkins/workspace/open-policy-agent-test/atlantis.yaml",
"result": {
"deny": []
}
},
{
"path": "/var/lib/jenkins/workspace/open-policy-agent-test/manifest/samplefour.yaml",
"result": {
"deny": []
}
},
{
"path": "/var/lib/jenkins/workspace/open-policy-agent-test/test.yaml",
"result": {
"deny": [
"Wrong"
]
}
}
]
}

因此,如果deny命令包含任何消息,我希望构建失败。

有办法做到这一点吗?

是的,您只需执行一个命令并返回STDOUT。如果您返回一个JSON,您甚至可以解析JSON,提取您想要的任何值并进行验证。请参考以下样本。请注意returnStdout: true以返回命令的输出。

pipeline {
agent any
stages {
stage('Test') {
steps {
script {
def output = sh(returnStdout: true, script: "opa exec "/var/lib/jenkins/workspace/open-policy-agent-test/" --config-file=/home/isw_user/opa-conf.yaml --decision /rules").trim()
if (output != "") { // Do any validation here
error "Build Has Errors, Failing" 
}
}
}
}
}
}

最新更新