web-dev-qa-db-ja.com

Macのjenkins、PATHが正しく設定されていない、/ usr / local / binがない

最近、Homebrewを使用してJenkinsをインストールしました。 MercurialもHomebrewを使用してインストールしました。

ターミナルからhg repoをうまくクローンできます。しかし、私がジェンキンスでの仕事の一環として同じことをしようとすると、失敗します。

だから、仕事で、私はジェンキンスにシェルスクリプトを実行するように言いましたecho $PATH。案の定、パス/usr/local/bin そこにいない。ターミナルから同じコマンドを実行すると、そこにあります。

つまり、ターミナルからエコーするときに、Jenkinsが使用しているのと同じPATHをプルするようにPATHを変更する最良の方法は何ですか?

Jenkinsは、これらのテストを実行するためにログインしているのと同じユーザーアカウントから実行しているため、これが発生している理由を理解することはできません。

34
Dan Morrow

Jenkinsのlaunchd .plistファイルでは、次を使用してPATH環境変数を設定できます。

<key>EnvironmentVariables</key>
<dict>
    <key>PATH</key>
    <string>(insert your path value here)</string>
</dict>

これにより、PATHが必要なものに設定されます。

16
gaige

何らかの理由で、Jenkinsはスレーブに接続するときに/ usr/local/binをPATHに保持しません。
次のいずれかの方法でPATHに追加できます

  • Node構成に環境変数を追加する、または
  • ユーザーフォルダーに.bashrcファイルを追加する

    PATH="/usr/local/bin:${PATH}"
    
9
Maxime Viargues

Launchd.confファイルでPATHを設定できます。詳細は here を参照してください。ご了承ください man launchctlは、「コマンドを$ HOME/.launchd.confまたは/etc/launchd.confに保存して、launchdの起動時に読み取ることができる」と言っているため、ホームディレクトリに「.launchd.conf」を作成して、このファイルのリンクからの指示を使用してください。しかし、launchd.confファイルで私が知っている限り、PATHにディレクトリを追加することはできません。PATHを書き換えることができます。
/etc/paths.dディレクトリを使用したソリューションの here も確認できます

3
cody

ノードのPATH環境変数を設定しただけでも、Hombrew Mercurialインストールでは機能しないことがわかりました。パスは設定されますが、VCSチェックアウトフェーズではなく、スクリプトビルドフェーズでのみ使用されます。これが私がやったことです。

  1. Manage Jenkins -> Configure Systemに移動します
  2. 新しいMercurialインストールを追加する
  3. 好きな名前を付けてください(私は私の名前をbuild-macと名付けました)
  4. Installation Directoryについては、/usr/local
  5. ExecutableパラメータはINSTALLATION/bin/hgに事前設定されているため、そのままにしておきます。
  6. ここにあるものはすべて空白のままにすることができます
  7. ジョブに入り、設定を編集します
  8. Source Code Managementの下で、追加したMercurialインストールにMercurial Versionを設定します。
  9. セーブ
  10. $$$

これで、同じ問題が発生している他の人を助けることができれば幸いです。これで、(デフォルトで)/usr/binの内部で何かを実行することは許可されなくなりました。以前はそこにシンボリックリンクを張っていましたが、今は新しい「システム整合性保護」「機能」を使用しているため、それほど簡単ではなく、Macスレーブがヘッドレスの場合はさらに難しくなります。

3
Jordan Bondo

次のPATH変更では、=の両側にスペースを入れないでください:PATH = "/ usr/local/bin:$ PATH"

MacOSにインストールされているJenkinsの事前構築ステップに追加しました。

2
Mayank