我想直接使用ssh连接到远程运行的Docker容器。通常我可以
$ ssh -i privateKey user@host
$ docker ps #which will list all running containers
$ docker exec -it ***** bash deploy.sh # ***** is container id and this line run a deployment script
但是我需要从Jenkins管道运行此脚本,而我只有一次机会。经过多次尝试,我想到了这个
$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep unique_text | cut -c1-10) /bin/bash deploy.sh
因为它返回而无法帮助我的困境
"docker exec" requires at least 2 arguments.
这实际上意味着命令在这里被截断$(docker ps | grep ...
我的解决方案
sh 'ssh -tt -i $FILE -o StrictHostKeyChecking=no $USER@$HOST /bin/bash -c \'"docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash start.sh"\''
答案 0 :(得分:3)
$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep unique_text | cut -c1-10) /bin/bash deploy.sh
这将在本地计算机(而不是远程计算机)上使用docker ps
命令运行子外壳。您需要在远程服务器上的Shell中处理该完整命令:
$ ssh -tt -i ~/privateKey user@host /bin/sh -c "docker exec -it $(docker ps | grep unique_text | cut -c1-10) /bin/bash deploy.sh"
答案 1 :(得分:2)
此问题的最佳解决方案是在Jenkins中创建一个节点
步骤1-转到“管理Jenkins”部分,然后向下滚动到“管理节点”部分。
第3步-为节点命名,选择Dumb slave选项,然后单击Ok。
步骤4-输入节点从属计算机的详细信息。在下面的示例中,我们将从机视为Windows机器,因此选择了“让Jenkins作为Windows服务来控制该Windows从机”选项作为启动方法。我们还需要添加从属节点的必要详细信息,例如节点名称和节点计算机的登录凭据。单击保存按钮。输入名称为“ New_Slave”的标签可用于配置作业以使用此从属计算机。
完成上述步骤后,新节点计算机最初将处于脱机状态,但是如果正确输入了先前屏幕中的所有设置,则该计算机将联机。如果需要,可以随时使节点从属计算机脱机。
在我的詹金斯管道中
node("build_slave"){
sh 'docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash deploy.sh'
}