natural born minority
わりかし「特殊環境らしいところで多段に要素が重なった話」なのと「自分よう備忘録」なので、箇条書きで詳しく解説しません。ごめんなさい。
chcp 61005
で「ジョブが止まる(ステイしてエラーも終了もしない)」「期待していた挙動にならない」場合の対処Jenkinsのnodeをmaster/slaveで組んでいました。
JenkinsNodeを、普通に Master:Linux , Slave:Windows(日本語のやつ) を作って、 PipelineScript(Jenkinsfile)にて、
bat "MSBuild.exe XXX.sln"
などすると、Jenkinsのログコンソール文字化けします。
これは、
プロジェクト "xxx" (規定のターゲット) のビルドが完了しました。
ビルドに成功しました。
0 警告
0 エラー
の表記なのですが…まあわかりませんねw
そのため、こちらのサイト の如く、Jenkinsfileで
bat 'chcp 65001'
を書いて実行したのですが、以前のハマりと同じく「ジョブが止まった状態」になりました。
ちょっと煩雑に「いろいろやった」ので、やったことと結果を箇条書きにしていきます。
932
(shift_jis)の状態から
chcp 65001
(UTF-8) -> プロンプトのウインドウの状態がリセットされ変わる(フォントなど)chcp 20127
(US-ASCII) -> 同上chcp 932
(shift_jis) -> 文字がクリアされるだけでウインドウは変わらずMSBuild
書いて実行 -> 普通に実行可能、表示は日本語chcp 65001
を書いて実行 -> ウインドウ状態リセット、chcp後の記述は動かずchcp 65001
後に実行
chcp 65001
-> 文字がクリアされるだけでウインドウは変わらずchcp 932
-> プロンプトのウインドウの状態がリセットされ変わる(フォントなど)MSBuild
書いて実行 -> 何も実行されない、空白の一行が出力されて終わる
MSBuild
を、コンソールから直に実行 -> 普通に実行可能、表示は日本語chcp 20127
後に実行
MSBuild
書いて実行 -> 普通に実行可能、表示は英語chcp 65001
を書いて実行 -> 普通に実行可能、表示は英語なんとなく、65001
が「ひとつだけ異端」で、そこさえ回避すれば「世の記事っぽく動く」感じがします。
chcp
で使用出来る「コードページの数値」の一覧はこちら。
Jenkinsfile
の指定のジョブを「SlaveのJenkins(windows)」にて実行問題を切り離すため、Slave:Jenkins側のslave.jar
は、
REM echo off
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
set JENKINS_URL=http://[jenkinsのurl]/computer/[slave名]]/slave-agent.jnlp
set JENKINS_SECRET=[それっぽいの]
REM charset (us mode)
chcp 20127
REM Connect to Jenkins server (AWS)
java -Dhttp.proxyHost=%PROXY_HOST% -Dhttp.proxyPort=%PROXY_PORT% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar slave.jar -jnlpUrl %JENKINS_URL% -secret %JENKINS_SECRET%
な記述のbatファイル
を実行し、固定した状態での「JenkinsからSlave実行」とします。
bat "chcp 65001"
記述で実行 -> ジョブがその行でステイ、エラーも終了もせずbat "chcp 20127"
記述で実行 -> 止まらず次の行に行ける
MSBuild.exe
実行があっても「日本語かつ文字化け」した表示のままbat "chcp 65001 && MSBuild.exe ..."
記述で実行 -> 日本語表示(成功!)
bat "chcp 20127 && MSBuild.exe ..."
記述で実行 -> 英語表示
日本語ファイル名
は文字化けbat "cmd.exe /u /c MSBuild.exe ..."
記述で実行 -> 日本語結果で文字化け
bat "MSBuild.exe ..."
と書いた場合と同じ…これ以上はがんばれなかった…。(環境固有かもしれないし)
とりあえず、
Jenkinsfileに bat "chcp 20127 && MSBuild.exe ..."
記述で実行
で、茶お濁して先に進むことにしました。
「結果がわからない」が問題だったので。日本語ファイル名は…まぁ「推測つくだろう」ってことで。
人によっては
可能性があるらしい…のだけど、それすらも検証していません。
複合要素がありすぎて、「特殊な環境固有」なのか「(前提に書いた)組み合わせによるもの」なのか、わからない上に「検証のワンショット」がかなり時間を使い、「落とし所に至る」まで時間がかかりました。
もっと良い解決法があったのかもしれませんが…まあ「同じことに陥った人」はご連絡くださいまし。
以下を参考にさせていただきました。感謝です。
Windowsまわりで、いろいろ詳しい助言をくださった @iso2022jp さん、ありがとうございました。
blog comments powered by Disqus