jenkins - Jenkins 通过 ssh 部署作业
问题描述
问题:
sshPublisher
我正在使用构建步骤运行 bash 脚本作为部署的一部分。脚本的一部分是使用netstat
(和grep
/ awk
)查找进程 ID。当我登录虚拟机并手动运行脚本时,会终止进程,但通过 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
解决方案
从您在评论中发布的输出来看,这就是问题所在:
sudo: sorry, you must have a tty to run sudo
选项 1 - visudo 解决方案
(这是来自 OP 的解决方案):
用于visudo
编辑sudoers
文件并注释掉requiretty
条目
选项 2 - Jenkins 插件解决方案
Publish Over SSH 插件的功能列表包含以下项目:
启用要在伪 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:
推荐阅读
- html - 如何在网站预加载器上使徽标变大
- css - FlexBox - 如何显示一列 100% 和另外两列 50%
- python - 如何计算从多列派生的混淆矩阵?
- java - 由于“java.sql.SQLNonTransientConnectionException:无法创建与数据库服务器的连接”,无法连接到 mysql 服务器
- intellij-idea - 在目录 IntelliJ 中查找替换
- mysql - SQL为列的中值编写查询
- javascript - 如何仅更改网页的一部分/在整个站点中保持相同的模板?
- mysql - SQL - Left Join 和 Group By 导致第二个表中的行数据混淆
- google-sheets - 如何在查询函数中按两个条件排序?
- c++ - OpenSSL 测试失败