Jenkinsパイプラインでシェルスクリプトの実行中にlsofコマンドが見つかりませんでした。

Jenkinsパイプラインでシェルスクリプトの実行中にlsofコマンドが見つかりませんでした。

特定のポートに対して実行中のプロセスIDを取得しようとしているので、正常に実行されたコマンドを手動で実行してください。

lsof -i :9090 -t

ただし、Jenkinsパイプラインのシェルスクリプトを介して同じコンピュータで同じコードを実行すると、エラーが発生します。lsof: command not found

以下はJenkinsパイプラインのコードです。

def stopServer() {
    script {
        echo "Stopping server"
        sh '''var=\$(lsof -i :9090 -t)
          kill -TERM \$var
          '''
    }
}

同じコマンドが同じマシンの端末で実行される可能性があるが、Jenkinsパイプラインのシェルスクリプトでは実行できない理由を理解するのに役立ちます。

ベストアンサー1

lsofこれは、そのディレクトリが「PATH」環境変数にリストされていないためです。jenkins

解決策は次のとおりです。

  1. JenkinsのPATHが正しく設定されていることを確認してください。または
  2. lsofdefにフルパス名を指定してくださいstopServer

ただし、lsof -i :9090 -tローカルサーバープロセスのPIDのみをリストしないでください。聞くポート9090には、ネットワーク上のコンピュータのポート9090に接続されているクライアントプロセスのPIDも一覧表示されます。

を使用したい場合がありますnetstat -tpln。例えば

netstat -tpln | awk -F'[[:space:]/:]+' '$5 == 9090 {print $(NF-2)}'

おすすめ記事