bugfix> jenkins > 投稿

問題:

sshPublisher を使用した展開の一部としてbashスクリプトを実行していますビルドステップ。スクリプトの一部は、 netstat を使用してプロセスIDを見つけることです(および grep / awk )。 VMにログオンしてスクリプトを手動で実行するとプロセスが強制終了されますが、Jenkinsデプロイジョブでは実行されません

Jenkinsサーバー(VM1):

stage('deploy'){
    sshPublisher(publishers: [sshPublisherDesc(configName: 'fdpdeploy', transfers: [sshTransfer(excludes: '', execCommand: './deploy.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/fdp-0.0.1-SNAPSHOT.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])           
}

VM2: これはスクリプト deploy.sh です

#!/bin/bash
processId=$(sudo netstat -plten | grep 9030 | awk {'print $9}' | awk -F '/' {'print $1'})
echo $processId
kill -9 $processId
sleep 5
echo 'Starting FDP app'
nohup java -jar /data/fdp-0.0.1-SNAPSHOT.war &> /data/logs/FDPBizApp.log &
exit 0
fi

回答 1 件
  • コメントで投稿した出力から、これは問題です。

    sudo: sorry, you must have a tty to run sudo

    オプション1-visudoソリューション

    (これはOPからの解決策です):

    visudo を使用する   sudoers を編集するには  ファイルし、 requiretty をコメントアウトします  エントリ

    オプション2-Jenkinsプラグインソリューション

    Publish Over SSHプラグインの機能リストには次の項目があります。

    Enable the command/script to be executed in a pseudo TTY

    これを有効にするには、 usePty: true を追加します   sshTransfer へ  サイト運営者のブロック。あなたの Jenkinsfile  ステップは次のようになります。

    stage('deploy'){
        sshPublisher(publishers: [sshPublisherDesc(configName: 'fdpdeploy', transfers: [sshTransfer(excludes: '', execCommand: './deploy.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/fdp-0.0.1-SNAPSHOT.war', usePty: true)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])           
    }
    
    

    既存の手順からの唯一の変更は、 , usePty: true を追加することです   sourceFiles: の後

あなたの答え