【发布时间】:2017-08-05 03:32:35
【问题描述】:
我们有一个用于 Jenkins 项目和构建的 (3) 层系统。 我们已经在工作节点和远程主机之间建立了信任关系 通过 SSH 插件和密钥。
jenkinsrh-01 = main jenkins server (gui for projects/builds, dashboard, etc)
sys-07 = worker node (projects / builds are run from this remote node)
raloda10 = remote host (target of builds)
在 Jenkins 主服务器 (jenkinsrh-01) 的 gui 配置屏幕中,我们的项目的以下代码具有硬编码参数值等。 $SCRIPT 位于远程主机,我们希望传递参数值以供远程主机脚本使用。
构建 --> 执行 Shell --> 命令
#!/bin/bash
export ORACLE_USER="oracle"
export ODA_HOST="raloda10"
export DATABASE="DEV11G05"
export SCHEMA="ASA14101X5"
export COMMENT="good state archive"
export SCRIPT="/u01/app/oracle/databases/dev11g05/bod/jenky_test.sh"
sudo -i -u ${ORACLE_USER} ssh ${ODA_HOST} ${SCRIPT}
在目标远程主机 (raloda10) 上目标脚本的内容 是一个简单的测试,用于回显在上述构建步骤中通过“导出”措辞传递给它的参数值。目标远程主机脚本(jenky_test.sh)的内容是;
#!/bin/bash
#
#
echo
echo This is correct target script on remote host
echo
echo 1. Source database: ${DATABASE}
echo 2. Name of schema: ${SCHEMA}
echo 3. Comments: ${COMMENT}
echo
echo ${DATABASE}
echo ${SCHEMA}
echo ${COMMENT}
#
exit
worker build 可以访问远程主机,找到远程主机脚本,并运行 shell 脚本“jenky_test.sh”。
但问题是 jenky_test.sh 脚本在运行时没有任何构建参数被传递。它不会回显这些值,因为它们是空白的,如下面的“控制台输出”所示;
Started by user Donald Collins
[EnvInject] - Loading node environment variables.
Building remotely on sys-07 (SYS-07) in workspace /var/lib/jenkins/workspace/fails_Send_Jenkins_Parameters_fromSlave_as_Inputs_for_Script_on_Remote_Host
[fails_Send_Jenkins_Parameters_fromSlave_as_Inputs_for_Script_on_Remote_Host] $ /bin/bash /tmp/hudson7103389345936604753.sh
This is correct target script on remote host
1. Source database:
2. Name of schema:
3. Comments:
控制台输出应该显示上面第 1、2 和 3 行的导出变量(参数)的值。相反,它们是空白的。
我已经在执行 Shell 的命令步骤中为“sudo”调用尝试了各种不同编码的各种组合。 “Nothing”似乎能够获取要作为输入传递给远程目标主机上 jenky_test.sh 的参数值。
我确定我在这里遗漏了一些显而易见的东西,因为我试图用 Jenkins 做的是“Jenkins 101”的东西;)...
非常感谢任何帮助或建议。
最好的问候, 唐纳德
【问题讨论】:
-
您在本地 shell 而不是远程 shell 中设置环境变量。这就是问题所在。您需要将变量作为参数传递给脚本,或者通过读入 EOF 并在写入 EOF 之前列出命令来设置它们