Jenkins pipelineを使っていると、SlaveとMasterの概念がごちゃごちゃになって、ついついMaster PCの中を見に行ってしまうようなコードを書いてハマったりします。
そういった点を解消しながら、Slave PCのテキストファイルを読み込む方法をご紹介したいと思います。
まず、前提としてbat
コマンドを実行すると、Slave PC側で実行されるという基本を覚えておいてください。
一方、Pipeline scriptでGroovyによるコマンドでファイルを見に行こうとすると、Master PCの中身を見に行きますので、ご注意ください。
そのため、実現方法としては、
- batコマンドでファイルを読みこむ
- echoによる出力を戻り値で変数に返す
となります。
結果は以下です。
jenkinsfile
TEXT_PATH = WORKSPACE+'/text_directory'
TEXT_CONTENTS = bat returnStdout: true, script: '''@echo off
for /f " usebackq tokens=*" %%a in ('''+TEXT_PATH+'''/contents.txt) do (
echo %%a
goto :exit_for
)
:exit_for'''
print( TEXT_CONTENTS )
これはテキストファイルの最初の1行だけ読みこむ方法ですが、応用すれば複数行もいけます。
注意点としては、batファイル内でechoを使って文字列を出力してしまうと、それも戻り値に含まれてしまいますので、考慮するようにして下さい。