如何从jenkins docker容器在主机上运行shell脚本?

时间:2018-10-22 08:31:41

标签: docker jenkins docker-compose

我知道我的问题已经在How to run shell script on host from docker container?中进行了讨论,但是我认为我的问题有点复杂。

首先,我尝试解释我的情况。我正在从CentOS VM(主机)中的Docker容器中使用jenkins2.x。在jenkins中,我创建了一个Job,可以从SVN中检出3个文件(2个Shell脚本和1个.jar文件)。这些文件将下载到jenkins docker容器中的jenkins工作区中,也将下载到已安装目录中的主机上,如下所示:

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

其中一个脚本将从jenkins job中执行,并执行另一个脚本。第二个脚本签出SVN目录并执行更多操作。

因此,我希望在该目录中有一个新的装入卷,所有执行的第二个脚本的结果都将放置在主机上。我认为通过“ SSH”连接到主机并执行脚本似乎很好,但是我该怎么做。

我希望我能解释我的问题可以理解

2 个答案:

答案 0 :(得分:1)

我会回答有关“我认为通过'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-key,或者也可以尝试

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是我们在运行命令期间设置的主机。

答案 1 :(得分:0)

基于答案中的注释:

  

我们只需安装任何SSH插件(SSH)或(通过SSH发布),然后   提供用户名/密码后,它将可以正常工作。

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

如前所述,这不是最好的方法,但是有时从旧系统迁移时,我们需要一次移动一个步骤,这是最简单的步骤。