8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jenkins Scripted Pipeline での parameters の書き方

Posted at

はじめに

Jenkins Pipeline には node で始まる Scripted Pipeline と pipeline で始まる Declarative Pipeline の2種類があります。
Scripted Pipeline で parameters の choice を書こうとしたときにはまったので備忘録です。

parameters

Declarative Pipeline での書き方

Pipeline Syntax (公式ドキュメント)

Jenkinsfile
pipeline {
    agent any
    parameters {
        choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '')
    }
    stages {
        stage('echo parameters') {
            steps {
                echo "CHOICES: ${params.CHOICES}"
            }
        }
    }
}

Scripted Pipeline での書き方

Is it possible to make a parameterized scripted pipeline in Jenkins by listing the parameters in actual script, not in job config - Stack Overflow

node {
    properties([
        parameters([
            string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: ''),
            booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
        ])
    ])
    ....
}

choice に関する記述はありません。

parameters: choice

Scripted Pipeline でうまくいかない書き方

Jenkinsfile

node {
    properties([
        parameters([
            choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: ''),
        ])
    ])
    stage('echo parameters') {
        echo "CHOICES: ${params.CHOICES}"
    }
}

と書いたところ以下のエラーが発生しました。

java.lang.IllegalArgumentException: Could not instantiate {name=CHOICES, choices=[one, two, three], description=}
for ChoiceParameterDefinition(name: String, choices: String, description: String):
java.lang.ClassCastException: hudson.model.ChoiceParameterDefinition.choices expects
class java.lang.String but received class java.util.ArrayList

Jenkins のバージョンは ver. 2.32.1 とやや古めです。

Scripted Pipeline で動く書き方

Jenkinsfileの書き方 (Jenkins Pipeline) - Qiita を参考にしました。

公式ドキュメントではchoiceの場合、choices: ['one', 'two', 'three']
のようにかけるそうですが、なぜか私の環境ではsyntax errorがでてしまったため、
以下のように\n改行コードを入れることでセレクトボックス入力が可能になりました。

Jenkinsfile
node {
    properties([
        parameters([
            choice(name: 'CHOICES', choices: 'one\ntwo\nthree', description: ''),
        ])
    ])
    stage('echo parameters') {
        echo "CHOICES: ${params.CHOICES}"
    }
}

何が原因かは調査していません。

おわりに

現在は Declarative Pipeline が主流だとは思うのですが、同じ Jenkins Pipeline の中に2種類あるので検索しても情報がごちゃ混ぜで欲しい情報に辿り着くのが難しいですね。
Jenkins 自体レガシーになりつつあると思うので早めに GitHub Actions に移行していきたいところです。 GitHub Enterprise にも今年実装予定のようなので期待しています。

8
4
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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?