ShellScript
Bash
Linux
Jenkins
sudo

sudoで実行するスクリプトに環境変数を渡すには-Eオプション

流れ

  • Jenkinsを「ビルド→シェルの実行」メインで使いたい。
  • Jenkinsのヘルプのベストプラクティクスとして、Jenkinsのジョブから別途用意したシェルスクリプトを起動することにした。
  • jenkinsユーザーでは権限の問題が多発するので、sudoersに追加のうえ、シェルスクリプトはsudoで起動することにした。
  • 起動したシェルスクリプトで$WORKSPACEなど、Jenkinsのビルド時の環境変数が使えないことが判明した。
  • sudoする側のシェルスクリプトでは正しく環境変数が揃っていた。
  • 調べてみるもののexport WORKSPACEは効かず、もしかして引数で渡すのか?と悩んだ。

結論としてはsudoのオプション
-E preserve user environment when executing command
で環境変数を引き継ぐことができた。

関連

本質的に別問題なのだが、ここで-Eオプションの存在に気づけた。

Jenkins固有という考えから問題を$WORKSPACEに限らず、まず全ての環境変数の差を確認しよう→環境変数を引き継げるのか? という思考シフトの契機。

jenkins workspace shellscriptなど、Jnekins方面から攻めてもあまりうまくいかないので、最初からもっと本質的に調べればよかった。

こっちはそのまま使えそう

こっちを最初にコピペして、(user)/home/user/foo.shに気づかず躓いていた。

使える環境変数一覧。
ここでしているようなパラメーターとして渡す方法はとりたくなかった。