3
0

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 3 years have passed since last update.

JenkinsのPipeline script from SCMのスクリプトから別のgroovyを読み込む

Posted at

はじめに

GitHubでJenkinsのPipeline scriptを管理している中で、
共通処理なんかをまとめて呼び出したくなったので色々調べたり実行したりした内容のまとめ

環境・前提

  • Jenkins 2.235.5
  • SCMはgit(GitHub)
  • パイプラインの記述はDecrarative Pipeline
  • ここに記載したコード等は仮で記述しているので動作確認はしていません

ディレクトリ構成

repository-root
└─jenkins-pipeline
   ├─main.groovy
   └─partials
     ├─fuji.groovy
     └─kiku.groovy
  • jenkins-pipeline配下にスクリプトを配置している
  • jenkins-pipeline/main.groovy をScript Pathに指定している

main.groovyから別のscriptを読み込む

  • script内で load を行うだけでOK
  • 読み込まれる対象のスクリプトは最後に return this を記述
  • 途中でworkspace内のブランチ変更などが行われたときにエラーにならないように事前に読み込んでおくのが良さそう
  • pwd() はジョブのworkspaceが返却される
    • e.g.) makai-jobの場合
      • /path/to/jenkins/workspace/makai-job
jenkins-pipeline/main.groovy
pipeline {
    agent any
    stages {
        stage('Initialize') {
            steps {
                script {
                    fuji = load "${pwd()}/jenkins-pipeline/partials/fuji.groovy"
                    kiku = load "${pwd()}/jenkins-pipeline/partials/kiku.groovy"
                }
            }
        }
        stage('exec fuji') {
            steps {
                script {
                    fuji.say()
                    fuji.sing("Lemon")
                }
            }
        }
        stage('exec kiku') {
            steps {
                script {
                    kiku.say()
                }
            }
        }
    }
}
jenkins-pipeline/partials/fuji.groovy
def say() {
    echo "I'm fuji aoi!"
}

def sing(String title) {
    script {
        print "Sing th ${title}"
    }
}

return this
jenkins-pipeline/partials/kiku.groovy
def say() {
    script {
        print "I'm kikunojo!"
    }
}

return this

おわりに

はまったのはgit branchの切り替え前にスクリプトをロードしておかないと対象のブランチの状態によってはスクリプトが存在せずにFile Not Foundになってしまうところ。
解決してみればそりゃそうだって感じですけど挙動を知っていないとこういうところでハマってしまいますね……

もっと良い方法などあれがご指摘いただけると助かります。

3
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?