忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

Groovy の Error も try-catch でえいえいって処理する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Groovy の Error も try-catch でえいえいって処理する

Jenkins のパイプラインで次のようにする。

def hiyoErrorReturner(str) {
    if(str.equals("hiyo")) {
        error "ひよだー";
    } else {
        echo "${str}だったー"
    }
}

node {
   hiyoErrorReturner("hitsu");
   hiyoErrorReturner("hiyo");
}

すると以下のように Error で止まる。

hitsuだったー
ERROR: ひよだー
Finished: FAILURE

Error に来たら処理が止まる、というのは自然な動きなのだが時に途中で失敗しようがどうしようが処理を回しきってほしい、ということもある。例えば、多数のリソースに対して処理を実施する場合にそう思うことがあるのではないか。どれに失敗したのかをレポーティングしたうえで処理を継続してほしい、と。そのような場合は try-catch が使える。

def hiyoErrorReturner(str) {
    if(str.equals("hiyo")) {
        error "ひよだー";
    } else {
        echo "${str}だったー"
    }
}

node {
    def list = ["hitsu", "hiyo", "neko"];
    list.each{word->
        try {
            hiyoErrorReturner(word);  
        } catch(thrownObject) {
            echo "${word}の処理に失敗したっぽいー";
        }
    };
}

このように書くと次のような結果となる。

hitsuだったー
hiyoの処理に失敗したっぽいー
nekoだったー

Groovy を普段から書いている人には当然なのかもしれないが、pipeline で使っていてうーんってなったのでメモメモ。


なお、こんな風にも使える。

def executeCommand(command) {
    sh command;
}

node {
    def list = ["ls", "pwd", "unknownCommand"];
    list.each{command->
        try {
            executeCommand(command);
        } catch(Error) {
            echo "${command}が実行できなかったよ";
        }
    };
}

すると次のようになる。

+ ls
+ pwd
/var/lib/jenkins/workspace/jobName
+ unknownCommand
/var/lib/jenkins/workspace/jobName@tmp/durable-bd3798d3/script.sh: 1: /var/lib/jenkins/workspace/jobName@tmp/durable-bd3798d3/script.sh: unknownCommand: not found
unknownCommandが実行できなかったよ

sh で実行したコマンドが失敗しても Error を投げてくれるのでそれをキャッチしてハンドルできる。なので大量のリクエストを送信する際なんかにも使えそうだ。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R