如何从Jenkins Docker容器中运行Shell脚本来操作主机?

4

我知道我的问题已经在如何在Docker容器中从主机运行shell脚本?讨论过,但我认为我的问题有点更加复杂。

首先,我来解释一下我的情况。我正在使用位于CentOS VM(主机)中的docker容器中的jenkins 2.x。在jenkins中,我创建了一个作业,该作业从SVN检出3个文件(2个Shell脚本和1个.jar文件)。这些文件将在jenkins docker容器中的jenkins工作区以及在类似以下的挂载目录中的主机上下载:

 volumes:
  - ${DATA_HOME}/jenkins/data:/var/jenkins_home

其中一个脚本将从Jenkins作业执行,并执行另一个脚本。第二个脚本检出SVN目录并执行更多的操作。

因此,我想在该目录中挂载新的卷,以便将执行第二个脚本产生的所有结果放置在主机上。我认为通过“SSH”连接到主机并执行脚本似乎很好,但我该如何做呢。

希望我能够清楚地解释我的问题。


1
请在运行docker时挂载另一个卷,并在您的脚本中使用该路径。 - Ijaz Ahmad
你的意思是什么?我使用了这个卷 - /opt/vfoms-central-test-environments:/opt/vfoms,我想从Docker容器中执行/opt/vfoms-central-test-environments中的shell脚本。 - guguli
@guguli,你试过我的回答了吗? - Adiii
1
@Adiii 没有,我没有这样做。我在Jenkins中安装了SSH插件,可以通过它来完成。这样更容易。 - guguli
@guguli将此作为答案添加,这是最快的方法。我差点错过它了。 - peeyush singh
2个回答

2

关于“我认为通过'SSH'连接主机并执行脚本似乎可以,但我该怎么做”的问题,我将给出答案。

在运行命令中传递主机机器的IP地址。

docker run --name redis --env pass=pass_my --add-host="hostmachine:192.168.1.23" -dit redis

现在,
docker exec -it redis ash

运行以下命令。这将在容器中执行SSH连接到主机

ssh user_name@hostmachine 'ls; bash /home/user_name/Desktop/test.sh; docker run --name db  -dit db; docker ps'

如果您想要不需要密码的东西,则可以在容器中设置ssh密钥,或者您也可以尝试...
sshpass -p $pass ssh user_name@hostmachine 'ls;/home/user_name/Desktop/test.sh; docker run --name db  -d
it db; docker ps'

如果您想运行容器内部的脚本,也可以通过将脚本传递给ssh来实现。

sshpass -p $pass ssh user_name@hostmachine < ./ab.sh

注意: $pass 是从 ENV 中获取的主机密码,hostmachine 是在运行命令时设置的主机。


0

根据ans中的评论:

我们可以简单地安装任何SSH插件(SSH)或(Publish over SSH),并在提供用户名/密码后即可使用。

唯一需要注意的是主机名解析不起作用,我们需要提供IP地址。

正如指出的那样,这不是最好的方法,但有时在从旧系统迁移时,我们需要一步一步地移动,这是最容易采取的步骤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接