Jenkins通过ssh部署作业

Jenkins通过ssh部署作业,jenkins,Jenkins,问题: 我正在运行一个bash脚本,作为使用sshPublisher构建步骤的部署的一部分。脚本的一部分是使用netstat和grep/awk查找进程ID。当我登录到VM并手动运行脚本时,会终止进程,但通过Jenkins部署作业,它不会 Jenkins服务器VM1: VM2:这是脚本deploy.sh 从您在评论中发布的输出来看,问题在于: sudo:对不起,你必须有一个tty才能运行sudo 选项1-visudo解决方案 这是OP的解决方案: 使用visudo编辑sudoers文件并注释掉re

问题:

我正在运行一个bash脚本,作为使用sshPublisher构建步骤的部署的一部分。脚本的一部分是使用netstat和grep/awk查找进程ID。当我登录到VM并手动运行脚本时,会终止进程,但通过Jenkins部署作业,它不会

Jenkins服务器VM1:

VM2:这是脚本deploy.sh


从您在评论中发布的输出来看,问题在于:

sudo:对不起,你必须有一个tty才能运行sudo

选项1-visudo解决方案 这是OP的解决方案:

使用visudo编辑sudoers文件并注释掉requirety条目

选项2-Jenkins插件解决方案 通过SSH发布插件的列表包含以下项:

允许在伪TTY中执行命令/脚本

您可以通过将usePty:true添加到发布服务器的sshTransfer块来启用此功能。您的Jenkins文件步骤应如下所示:

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

现有步骤的唯一更改是在sourceFiles:

之后添加usePty:true。首先,看起来需要删除deploy.sh末尾挂起的fi。如果没有匹配,则没有匹配。我建议在processId=$之上添加sudonetstat-plten。。。这样您就可以看到它是否真正识别了正确的流程。另外,您能否将构建的输出添加到问题的末尾,以便我们查看是否提供了任何细节?SSH:从主机连接[evosedgel009.openstacklocal]SSH:使用配置连接[fdpdeploy]。。。SSH:EXEC:STDOUT/STDERR来自命令[./deploy.sh]。。。sudo:抱歉,您必须有一个tty才能运行sudo kill:用法:kill[-s sigspec |-n signum |-sigspec]pid | jobspec。。。或kill-l[sigspec]启动FDP应用程序SSH:EXEC:在5204 ms后完成SSH:断开配置[fdpdeploy]。。。SSH:在visudoI中注释掉requirety后,传输了1个文件,工作正常。我已经注释掉requirety,它工作正常
#!/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
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)])           
}