Jenkins SSH 管道步骤 - 需要一个终端来读取密码
Jenkins SSH Pipeline Steps - A terminal is required to read the password
最近我一直在闲逛 Docker/Jenkins 以了解有关 CI/CD 工作流程的更多信息。我的目标是有一个从 github 获取推送的过程,构建代码并将 JAR 文件发布到远程服务器以进行进一步部署。
我一直在使用 Jenkins SSH Pipeline Steps Plugin,它允许我通过 SSH 连接到我的远程服务器以执行命令。
这是部署阶段,其中涉及我要执行的命令:
stage("Deploying") {
steps {
script {
withCredentials([sshUserPrivateKey(credentialsId: 'e48b15ad-0f5e-4f07-8706-635c5250fa29', keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'jenkins')]) {
remote.user = jenkins
remote.identityFile = identity
sshCommand remote: remote, command: 'cd Winston-Bot/; sudo ./kill_winston.sh'
sshCommand remote: remote, command: 'rm Winston-Bot/*.jar', failOnError:'false'
sshCommand remote: remote, command: 'rm -rf Winston-Bot/src', failOnError:'false'
sshPut remote: remote, from: "target/Winston-Bot-${VERSION}-jar-with-dependencies.jar", into: 'Winston-Bot/'
sshPut remote: remote, from: "src", into: 'Winston-Bot/'
sshCommand remote: remote, command: "echo ${VERSION} > Winston-Bot/version.txt"
}
}
}
}
执行 cd Winston-Bot/; sudo ./kill_winston.sh
时出现以下错误:
Executing command on ****[51.159.152.230]: cd Winston-Bot/; sudo ./kill_winston.sh sudo: false
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
Failed command ****#15 with status 1: cd Winston-Bot/; sudo ./kill_winston.sh
我已经使用以下代码将 jenkins 用户组添加到 etc/sudoers
:
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/Winston-Bot/.kill_winston.sh
当通过终端以用户 jenkins
身份登录我的远程服务器并且不需要密码时,脚本执行得非常好。谁能帮我解决这个问题?
我不确定它是否与您相关,但我在 macOS Big Sur 上遇到了完全相同的问题。无论我如何使用 sudo visudo
编辑 sudoers 文件,它都无法正常工作。
当我创建并编辑正确的文件后,它立即开始工作:sudo visudo -f /etc/sudoers.d/jenkins
jenkins ALL=(ALL) NOPASSWD: ALL
我的想法来自 this comment and this answer。
最近我一直在闲逛 Docker/Jenkins 以了解有关 CI/CD 工作流程的更多信息。我的目标是有一个从 github 获取推送的过程,构建代码并将 JAR 文件发布到远程服务器以进行进一步部署。
我一直在使用 Jenkins SSH Pipeline Steps Plugin,它允许我通过 SSH 连接到我的远程服务器以执行命令。
这是部署阶段,其中涉及我要执行的命令:
stage("Deploying") {
steps {
script {
withCredentials([sshUserPrivateKey(credentialsId: 'e48b15ad-0f5e-4f07-8706-635c5250fa29', keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'jenkins')]) {
remote.user = jenkins
remote.identityFile = identity
sshCommand remote: remote, command: 'cd Winston-Bot/; sudo ./kill_winston.sh'
sshCommand remote: remote, command: 'rm Winston-Bot/*.jar', failOnError:'false'
sshCommand remote: remote, command: 'rm -rf Winston-Bot/src', failOnError:'false'
sshPut remote: remote, from: "target/Winston-Bot-${VERSION}-jar-with-dependencies.jar", into: 'Winston-Bot/'
sshPut remote: remote, from: "src", into: 'Winston-Bot/'
sshCommand remote: remote, command: "echo ${VERSION} > Winston-Bot/version.txt"
}
}
}
}
执行 cd Winston-Bot/; sudo ./kill_winston.sh
时出现以下错误:
Executing command on ****[51.159.152.230]: cd Winston-Bot/; sudo ./kill_winston.sh sudo: false
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
Failed command ****#15 with status 1: cd Winston-Bot/; sudo ./kill_winston.sh
我已经使用以下代码将 jenkins 用户组添加到 etc/sudoers
:
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/Winston-Bot/.kill_winston.sh
当通过终端以用户 jenkins
身份登录我的远程服务器并且不需要密码时,脚本执行得非常好。谁能帮我解决这个问题?
我不确定它是否与您相关,但我在 macOS Big Sur 上遇到了完全相同的问题。无论我如何使用 sudo visudo
编辑 sudoers 文件,它都无法正常工作。
当我创建并编辑正确的文件后,它立即开始工作:sudo visudo -f /etc/sudoers.d/jenkins
jenkins ALL=(ALL) NOPASSWD: ALL
我的想法来自 this comment and this answer。