LoginSignup
0
0

More than 5 years have passed since last update.

Jenkins PipelineのUnsupportedOperationExceptionをなおす

Last updated at Posted at 2017-10-20

ゴール

Jenkins Pipelineがjava.lang.UnsupportedOperationExceptionでこけた。

どうやら、タプルを使用したことが原因らしい。
https://issues.jenkins-ci.org/browse/JENKINS-38846

このエラーを解消する。

やりかた

タプルなしの実装に変える。

Before

Jenkinsfile
def tupleFunc() {
    ["a","b"]
}

node {
    (tA, tB) = tupleFunc()

    echo "tA: $tA"
    echo "tb: $tB"
}
コンソール出力
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during canonicalization: java.lang.UnsupportedOperationException

java.lang.UnsupportedOperationException
    at com.cloudbees.groovy.cps.CpsTransformer.visitTupleExpression(CpsTransformer.java:858)
    at org.codehaus.groovy.ast.expr.TupleExpression.visit(TupleExpression.java:78)
    at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:335)
:
省略
:

Finished: FAILURE

After

Jenkinsfile
def tupleFunc() {
    ["a","b"]
}

node {
    result = tupleFunc()
    def tA = result[0]
    def tB = result[1]

    echo "tA: $tA"
    echo "tb: $tB"
}
コンソール出力
[Pipeline] {
[Pipeline] echo
tA: a
[Pipeline] echo
tb: b
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

考察

Jenkins 2.60.3 でこのエラーになったが、2.70 では発生しなかった。特定のプラグインのバージョンにバグがあるのかも。
UnsupportedOperationExceptionはタプルへの再代入時に発生するので、そういう動きが旧バージョンのJenkinsに入っていたのかなぁ。

tuple.groovy
def tuple = new Tuple('apple','banana')

println "tuple[0]: ${tuple[0]}"
println "tuple[1]: ${tuple[1]}"

tuple[0] = 'coke' // -> UnsupportedOperationException
実行結果
tuple[0]: apple
tuple[1]: banana
Caught: java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
    at tuple.run(tuple.groovy:6)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0