如何通过 jenkins 和 SSH 在远程机器上执行 运行 docker 命令?
how to run docker commands in remote machine via jenkins and SSH?
我是 jenkins 的新手,我正在尝试在 ubuntu 18.04 Live Server 上执行 docker 命令。我已经在上面安装了 docker 并且能够通过 ssh 运行 docker 命令。
现在我需要的是 运行 通过 Jenkins 在服务器上执行相同的命令。
我在本地 ubuntu 20.04 台式机上安装了 jenkins。我也安装了docker。
当我尝试从 jenkins 通过 SSH 运行 任何命令时,它的工作但是当我尝试 运行 docker 命令(docker -v)时,它说
[SSH] 正在执行...
bash:第 1 行:docker:找不到命令
我使用 echo $USER 并得到 jenkins 用户正在尝试 运行 命令
但是我没有在远程服务器上安装 jenkins 并且服务器上没有用户名 jenkins,所以它可能无法 运行
然后我在远程服务器上创建了一个 jenkns 用户 (sudo useradd -s /sbin/nologin jenkins) 并将其添加到 docker 组 (sudo useradd -aG docker jenkins)但它仍然无法正常工作。
我做错了什么!
或者有没有其他更好的方法而不是 SSH 到远程服务器上的 运行 docker 容器使用安装在不同机器上的 jenkins。
或者我需要在远程服务器上安装 jenkins 吗?
我用命令解决了
sudo ln -s /snap/bin/docker /usr/bin/docker
要让 jenkins 远程执行命令,您需要将远程主机添加到 jenkins 配置中。转到 Manage Jenkins -> Configure System -> SSH remote hosts -> Add
。
添加主机名或其 IP、端口和凭据。检查你的设置,如果一切正常你就通过。
下一步是配置您的作业。对于测试 porpose 使用自由式工作。在作业配置中,转到 Build
部分并选择 Execute shell script on remote host using ssh
。选择您的 ssh 主机并键入您想要的命令。
远程主机应该安装 docker 并且用户应该添加到 docker 组。
对于管道作业,您可以找到示例 here
更新:
检查此代码
node {
def remote = [:]
remote.name = 'docker-srv'
remote.host = '192.168.1.40'
remote.user = 'vagrant'
remote.password = 'vagrant'
remote.allowAnyHosts = true
stage('Remote SSH') {
sshCommand remote: remote, command: "ls -lrt"
sshCommand remote: remote, command: "docker -v"
sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop $i \"; date ; sleep 1; done"
}
}
结果应该是这样的
Executing command on docker-srv[192.168.1.40]: docker -v sudo: false Docker version 19.03.9, build 9d988398e7
sudo ln -s /snap/bin/docker /usr/bin/docker
这个命令帮我解决了我的问题
我是 jenkins 的新手,我正在尝试在 ubuntu 18.04 Live Server 上执行 docker 命令。我已经在上面安装了 docker 并且能够通过 ssh 运行 docker 命令。 现在我需要的是 运行 通过 Jenkins 在服务器上执行相同的命令。 我在本地 ubuntu 20.04 台式机上安装了 jenkins。我也安装了docker。 当我尝试从 jenkins 通过 SSH 运行 任何命令时,它的工作但是当我尝试 运行 docker 命令(docker -v)时,它说
[SSH] 正在执行... bash:第 1 行:docker:找不到命令
我使用 echo $USER 并得到 jenkins 用户正在尝试 运行 命令 但是我没有在远程服务器上安装 jenkins 并且服务器上没有用户名 jenkins,所以它可能无法 运行
然后我在远程服务器上创建了一个 jenkns 用户 (sudo useradd -s /sbin/nologin jenkins) 并将其添加到 docker 组 (sudo useradd -aG docker jenkins)但它仍然无法正常工作。 我做错了什么! 或者有没有其他更好的方法而不是 SSH 到远程服务器上的 运行 docker 容器使用安装在不同机器上的 jenkins。 或者我需要在远程服务器上安装 jenkins 吗?
我用命令解决了
sudo ln -s /snap/bin/docker /usr/bin/docker
要让 jenkins 远程执行命令,您需要将远程主机添加到 jenkins 配置中。转到 Manage Jenkins -> Configure System -> SSH remote hosts -> Add
。
添加主机名或其 IP、端口和凭据。检查你的设置,如果一切正常你就通过。
下一步是配置您的作业。对于测试 porpose 使用自由式工作。在作业配置中,转到 Build
部分并选择 Execute shell script on remote host using ssh
。选择您的 ssh 主机并键入您想要的命令。
远程主机应该安装 docker 并且用户应该添加到 docker 组。
对于管道作业,您可以找到示例 here
更新:
检查此代码
node {
def remote = [:]
remote.name = 'docker-srv'
remote.host = '192.168.1.40'
remote.user = 'vagrant'
remote.password = 'vagrant'
remote.allowAnyHosts = true
stage('Remote SSH') {
sshCommand remote: remote, command: "ls -lrt"
sshCommand remote: remote, command: "docker -v"
sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop $i \"; date ; sleep 1; done"
}
}
结果应该是这样的
Executing command on docker-srv[192.168.1.40]: docker -v sudo: false Docker version 19.03.9, build 9d988398e7
sudo ln -s /snap/bin/docker /usr/bin/docker
这个命令帮我解决了我的问题