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)}'

관련 정보