求基于文件比较结果控制Jenkins Pipeline执行的正确脚本
符合需求的Jenkins Pipeline脚本
方案1:捕获输出判断
直接匹配命令输出的"Yes"/"No"来控制流水线走向:
Pipeline脚本
pipeline { agent any stages { stage('文件对比验证') { steps { script { // 赋予test.sh可执行权限(若未预先设置) sh 'chmod +x /jenkins/test.sh' // 执行脚本并捕获输出 def verifyResult = sh( script: '/jenkins/test.sh', returnStdout: true ).trim() if (verifyResult == 'Yes') { echo "文件验证通过,流水线继续执行" } else { error "文件验证失败,输出为${verifyResult},流水线中止" } } } } stage('后续执行阶段') { steps { echo "开始执行后续业务步骤..." } } } }
/jenkins/test.sh内容
#!/bin/bash test "$(comm -23 <(sort -u /jenkins/OUTPUT1.txt) <(sort -u /jenkins/OUTPUT2.txt) | wc -l)" = "$(cat /jenkins/OUTPUT2.txt | wc -l)" && echo Yes || echo No
方案2:利用命令退出码(更简洁)
修改test.sh让验证失败时返回非0状态码,Jenkins会自动识别失败并中止流水线:
修改后的test.sh
#!/bin/bash if test "$(comm -23 <(sort -u /jenkins/OUTPUT1.txt) <(sort -u /jenkins/OUTPUT2.txt) | wc -l)" = "$(cat /jenkins/OUTPUT2.txt | wc -l)"; then echo Yes exit 0 else echo No exit 1 fi
简化版Pipeline脚本
pipeline { agent any stages { stage('文件对比验证') { steps { sh ''' chmod +x /jenkins/test.sh /jenkins/test.sh ''' echo "文件验证通过,流水线继续执行" } } stage('后续执行阶段') { steps { echo "开始执行后续业务步骤..." } } } }
关键说明
- 确保
/jenkins/OUTPUT1.txt和/jenkins/OUTPUT2.txt文件存在且Jenkins有权限读取 chmod +x步骤可根据实际情况省略,若test.sh已预先设置可执行权限- 方案2更贴合Jenkins的失败处理逻辑,无需额外的输出判断,依赖命令本身的退出码即可控制流水线状态
内容的提问来源于stack exchange,提问作者HEMANTH SAI KATKOJU
相关产品推荐
相关产品推荐

