【问题标题】:How to run shell script on Host from jenkins docker container?如何从 jenkins docker 容器在主机上运行 shell 脚本?
【发布时间】:2018-10-22 08:31:41
【问题描述】:

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

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

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

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

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

我希望我能解释清楚我的问题

【问题讨论】:

  • 请在 docker run 期间挂载另一个卷并在脚本中使用该路径
  • 你到底是什么意思?我使用该卷 - /opt/vfoms-central-test-environments:/opt/vfoms 并且我想从 docker 容器中执行 /opt/vfoms-central-test-environments 中的 shell 脚本。
  • @guguli 你试过我的答案吗>
  • @Adiii 不,我没有。我已经在jenkins中安装了ssh插件,可以做到。这更容易。
  • @guguli 将添加此作为答案,这是实现该目标的最快方法。我差点错过了。

标签: docker jenkins docker-compose


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

【讨论】:

    【解决方案2】:

    基于ans中的cmets:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 2022-10-20
      • 1970-01-01
      • 2016-06-30
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多