Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从jenkins docker容器在主机上运行shell脚本?_Docker_Jenkins_Docker Compose - Fatal编程技术网

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

如何从jenkins docker容器在主机上运行shell脚本?,docker,jenkins,docker-compose,Docker,Jenkins,Docker Compose,我知道我的问题已经在中讨论过了,但我认为我的问题有点复杂 首先,我试图解释我的情况。我使用的是CentOS VM(主机)中docker容器中的jenkins 2.x。在jenkins中,我创建了一个从SVN中签出3个文件的作业(2个Shell脚本和1个.jar文件)。这些文件将下载到jenkins docker容器中的jenkins workspace中,也可以下载到主机上的挂载目录中,如下所示: volumes: - ${DATA_HOME}/jenkins/data:/var/jenk

我知道我的问题已经在中讨论过了,但我认为我的问题有点复杂

首先,我试图解释我的情况。我使用的是CentOS VM(主机)中docker容器中的jenkins 2.x。在jenkins中,我创建了一个从SVN中签出3个文件的作业(2个Shell脚本和1个.jar文件)。这些文件将下载到jenkins docker容器中的jenkins workspace中,也可以下载到主机上的挂载目录中,如下所示:

 volumes:
  - ${DATA_HOME}/jenkins/data:/var/jenkins_home
其中一个脚本将从jenkins作业执行,另一个脚本将执行。第二个脚本签出一个SVN目录并执行更多的工作

所以我想在该目录中安装一个新的卷,所有执行的第二个脚本的结果都将放在主机上。我认为通过“SSH”连接到主机并执行脚本似乎很好,但我如何才能做到这一点

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

我将回答“我认为通过‘SSH’连接到主机并执行脚本似乎很好,但我如何才能做到?”

将主机Ip传递给run命令

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

并运行此命令。这将执行从容器到主机的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
sshpass-p$passssh用户_name@hostmachine

注意:$pass是来自
ENV
的主机密码,
hostmachine
是我们在运行命令期间设置的主机。

基于ans中的注释:

docker run --name redis --env pass=pass_my --add-host="hostmachine:192.168.1.23" -dit redis
我们可以简单地安装任何SSH插件(SSH)或(通过SSH发布)和 它将在提供用户名/密码后工作

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


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

请在docker运行期间装载另一个卷,并在脚本中使用该路径。您的确切意思是什么?我使用该卷
-/opt/vfoms中央测试环境:/opt/vfoms
,我想从docker容器中执行
/opt/vfoms中央测试环境中的shell脚本。@guguli你尝试过我的答案吗>@adii否我没有。我已经在jenkins中安装了ssh插件,有了它就可以了。这更容易。@guguli将添加这个作为答案,这是实现这一点的最快方法。我差点错过了。