try { sh 'revive -config revive.toml ./...' } catch (Exception e) { currentBuild.result = 'FAILURE' error("revive 代码校验未通过,终止流水线") } 不能终止流水线
时间: 2024-02-21 10:01:16 浏览: 82
如果您的 Jenkins 流水线在执行 revive 代码校验时出现错误,但是没有终止流水线,可能是因为 revive 命令返回了非零的退出码,导致 Jenkins 不认为此次执行是失败的。您可以通过设置 `sh` 命令的 `returnStatus` 参数为 `true`,并使用 `if` 语句判断命令是否执行成功来解决这个问题,具体步骤如下:
```
def reviveResult = sh(returnStatus: true, script: 'revive -config revive.toml ./...')
if (reviveResult != 0) {
currentBuild.result = 'FAILURE'
error("revive 代码校验未通过,终止流水线")
}
```
这里使用 `sh` 命令的 `returnStatus` 参数来设置返回命令的退出码而不是命令的输出结果。然后,使用 `if` 语句判断命令的退出码是否为 0。如果不是 0,则将当前流水线的结果设置为 FAILURE,并使用 `error` 函数抛出异常信息,以便在 Jenkins 控制台中显示错误信息。
请注意,这里使用的是 `def` 关键字来定义一个变量 `reviveResult`,以便在后续的判断语句中使用。
相关问题
def reviveResult = sh(returnStatus: true, script: 'revive -config revive.toml ./...') if (reviveResult != 0) { currentBuild.result = 'FAILURE' error("revive 代码校验未通过,终止流水线") } 不能终止流水线
您好,您的第一个问题是关于Jenkins Pipeline中不能终止流水线的问题。根据您提供的代码片段,这段代码的作用是执行revive命令来校验代码,并且如果校验未通过,则将当前构建的结果设置为“FAILURE”并抛出异常,但是并没有终止流水线的操作。
如果您想要在代码校验未通过时终止流水线,您可以使用Jenkins Pipeline提供的error函数来抛出异常并终止流水线。修改代码如下:
```
def reviveResult = sh(returnStatus: true, script: 'revive -config revive.toml ./...')
if (reviveResult != 0) {
error("revive 代码校验未通过,终止流水线")
}
```
这样,当revive命令校验未通过时,将会抛出异常并终止流水线。希望能够解决您的问题。
5.在方法中,使参数引用指向一个新的对象,外面的引用是指向原来的对象?还是新的对象? public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public Hero(){ } public Hero(String name,float hp){ this.name = name; this.hp = hp; } //复活 public void revive(Hero h){ h = new Hero("提莫",383); } public static void main(String[] args) { Hero teemo = new Hero("提莫",383); //受到400伤害,挂了 teemo.hp = teemo.hp - 400; teemo.revive(teemo); //问题: System.out.println(teemo.hp); 输出多少? 怎么理解? } }
在这段代码中,`revive`方法中的参数`h`是一个局部变量。当我们在方法内部将`h`指向新的`Hero`对象时,只是改变了局部变量的引用,而不会对外部的引用产生影响。
因此,在`main`方法中,调用`revive`方法后,`teemo`引用仍然指向原来的对象,而不是新创建的对象。所以打印`teemo.hp`输出的结果仍然是原来对象的血量减去400。
所以,输出结果为:-17
这是因为在`main`方法中,`teemo.hp = teemo.hp - 400;`执行后,`teemo.hp`的值变为-17。而在`revive`方法中创建的新对象并没有对外部的引用产生影响。
阅读全文