Jenkins Pipeline で Groovy と shell step を混在させる

2018/03/04

そもそもは、Jenkins の Pipeline で日付ディレクトリを扱いたかった。

ちょっと調べていく打ちに script step ( script { ... } ) にて Groovy を動かし、日時を取得できそうなので試した。

日時のフォーマットを扱う際に SimpleDateFormat を利用するが、これは import されてないので、きちんと import すること。また、 script step と shell step ( sh '...' ) は世界が違うので、定義済みのグローバル変数 env を用いて世界をまたぐことが重要となる。

以下が例となる。

import java.text.SimpleDateFormat

pipeline {
    agent none

    stages {
        stage('publish-html') {
            agent any
            steps {
                script {
                    def dateFormat = new SimpleDateFormat("yyyyMMddHHmmss")
                    def current = dateFormat.format(new Date())
                    def baseDir = '/var/www/'

                    env.workDir = baseDir + '/' + current
                    env.htmlDir = baseDir + '/' + 'html'
                }

                sh "mv _build/html ${env.workDir}"
                sh "ln -sfn ${env.workDir} ${env.htmlDir}"
            }
        }
    }
}

参考