
2017/06/17
Jenkins PipelineのJenkinsfileを作っていて、設定ファイル(Gradleでいう、gradle.propertiesのような感じ)が欲しいと思う時があります。今回はYamlファイルをJnekinsfileから読み込んで設定ファイルとして使う方法をご紹介します。
Jenkinsで様々な形式のファイルが簡単に読み込めるようになるプラグインです。Yamlファイルの読み込みに使います。Jenkins初期設定時のSuggested Pluginには入っていないので、自分でインストールしましょう。
プロジェクト直下(Jenkinsfileと同じ場所)にconfig.ymlを作ります。
someProp: 値1
someCategory:
  prop: 値2
  arrayProp:
    - 配列値0
    - 配列値1
    - 配列値2
Jenkinsfileを下記のようにします。今回はDeclarative Pipelineの書き方ですが、Scripted Pipelinesでもほとんど同じ書き方だと思います。
pipeline {
    agent any
    environment {
        CONFIG = "" //この時点ではプロジェクトの設定ファイルを読み込めないので仮の値を設定しておく
    }
    stages {
        stage('チェックアウトして設定ファイル読み込み') {
            steps {
                // プロジェクトをチェックアウト
                checkout scm
                script {
                    // チェックアウト後に設定ファイルを読み込む
                    // Pipeline Utility Steps Pluginの関数を使う
                    CONFIG = readYaml(file: 'config.yml')
                }
            }
        }
        stage('設定ファイル参照') {
            steps {
                echo "CONFIG.someProp = ${CONFIG.someProp}"
                echo "CONFIG.someCategory.prop = ${CONFIG.someCategory.prop}"
                echo "CONFIG.someCategory.arrayProp[0] = ${CONFIG.someCategory.arrayProp[0]}"
                echo "CONFIG.someCategory.arrayProp[1] = ${CONFIG.someCategory.arrayProp[1]}"
                echo "CONFIG.someCategory.arrayProp[2] = ${CONFIG.someCategory.arrayProp[2]}"
            }
        }
    }
}
これでJobを実行すると下記のようなコンソールログが出力されます。
[Pipeline] { (設定ファイル参照)
[Pipeline] echo
CONFIG.someProp = 値1
[Pipeline] echo
CONFIG.someCategory.prop = 値2
[Pipeline] echo
CONFIG.someCategory.arrayProp[0] = 配列値0
[Pipeline] echo
CONFIG.someCategory.arrayProp[1] = 配列値1
[Pipeline] echo
CONFIG.someCategory.arrayProp[2] = 配列値2
今回はYamlファイルをJenkins Pipelineの設定ファイルとして使ってみました。
Pipeline Utility Steps Pluginはpropertiesファイルも読み込めるので、gradle.propertiesを読み込んで、設定ファイルをGradleとJenkins Pipelineで共有することもできそうです。