Jenkins
JenkinsPipeline

Jenkins Decrarative PipelineでJenkins Pluginを呼び出す

More than 1 year has passed since last update.

はじめに

Jenkins Organization Folder Pluginができたことで、Gitのリポジトリ単位でJobを作っていく必要がなくなりました。ですが、そのためにはそれまでのGUIからのJob設定ではなくGroovyベースのDSLによるPipleline記述が必要になります。
また、Pipeline記述もScripted PipelineとDecrarative Pipelineの二つがあり、Decrarative Pipelineが推奨となっているようですが残念なことに公式ドキュメントを見てもわからないことがあったりします。
(もしかしたら自分の調べ方が足りないだけかもしれませんが)

記述方法

記述方法は以下のようになります。

step ([$class: '{Pluginの実行クラスの完全修飾名}',
        {引数名}: '{引数}', {引数名}: '{引数}' 
])

記述例

Scala向けコードカバレッジリポートを行うJenkins scoverage plugin を呼び出してみます。

                stage('coveragereporting'){
                        agent { label 'master' }
                        steps {
                                step ([$class: 'org.jenkinsci.plugins.scoverage.ScoveragePublisher',
                                        reportDir: 'target/scala-2.12/scoverage-report',
                                        reportFile: 'scoverage.xml'
                                ])
                        }
                }

実行クラスおよび引数の調べ方

Jenkinsfileに記述する際、GUIで編集していた時には意識しなかったPluginのクラス名と引数名を把握する必要があります。
実行クラス名は、対象PlugingのGithubなどでソースを参照し、hudson.tasks.Recorderを継承しているクラスを探します。この辺りはPluginの種類によりことなる可能性があるので、Plugin開発のガイドをみるのがよいでしょう。
引数は実行クラスのコンストラクタの引数を参照します。例であげている scoverage-pluginだと org.jenkinsci.plugins.scoverage.ScoveragePublisherの以下が相当します。

    @DataBoundConstructor
    public ScoveragePublisher(String reportDir, String reportFile) {
        this.reportDir = reportDir;
        this.reportFile = reportFile;
    }

おわりに

Jenknins Declarative Pipelineで処理を書くにはまだ情報が不足している気がしますが、今後はこちらがメインになっていくようなのでいまから触っておいて損はないはずです。
GUIともScripted Pipelineとも異なることが多く戸惑うこともあるでしょうが、是非ノウハウを共有して楽をしていきましょう。