【发布时间】:2021-06-24 00:44:19
【问题描述】:
我正在尝试使用 sshagent 插件部署到远程服务器。
当使用下面的语法时,我得到了
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sshagent(['nginx-ec2']) {
// some block
sh "ssh -o StrictHostKeyChecking=no ubuntu@<host_ip>"
sh "whoami"
}
}
}
}
}
得到输出:
[Pipeline] sh (hide)
+ whoami
jenkins
虽然我希望使用提供的凭据在远程服务器上运行脚本!!
所以,我不得不这样运行它
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sshagent(['nginx-ec2']) {
// some block
sh "ssh -o StrictHostKeyChecking=no -l ubuntu <host_ip> 'whoami && \
sudo apt update && sudo apt install -y docker.io && \
sudo usermod -aG docker ubuntu && \
source .bashrc && \
docker run -d nginx'"
}
}
}
}
}
是否有任何“干净”的方法可以使用 ubuntu 而不是 jenkins 用户在远程服务器上运行脚本?
编辑:
我知道我需要在 ssh 命令下运行它而不是作为单独的 sh 脚本运行,否则它将作为 jenkins 运行,并且我能够以如下脚本方式执行它。
这就是为什么我要问是否有更好的方式来以声明方式编写它。
node {
stage('Deploy'){
def dockerRun = "whoami && \
sudo apt update && sudo apt install -y docker.io && \
sudo usermod -aG docker ubuntu && \
source .bashrc && \
docker run -d nginx "
sshagent(['nginx-ec2']) {
sh "ssh -o StrictHostKeyChecking=no ubuntu@<host_ip> '${dockerRun}' "
}
}
}
谢谢,
【问题讨论】:
-
您的第一个代码块似乎是两个命令,一个从代理到
的 ssh 远程无操作,然后是一个代理本地 whoami。尝试过语法生成器? -
为什么它运行
whoami作为 jenkins 而不是 ubuntu,而它仍在 sshagent 块内? -
基本上,你已经将sshgent添加到jenkins master的代理中,我认为你应该删除sshagent,然后运行命令:ssh -I ubuntu并执行
whoami命令 -
@nurhun,您正在从 SSH 代理到
运行 ssh。您的代理显然是作为“詹金斯”启动的。参考shhagent example,子 unamewhomai。
标签: jenkins ssh jenkins-pipeline jenkins-plugins sudo