【问题标题】:How to run database scripts on database shell in jenkins?如何在詹金斯的数据库外壳上运行数据库脚本?
【发布时间】:2016-08-31 09:15:24
【问题描述】:

我在我的 jenkins 作业中添加了一个 Execute Shell 构建步骤。

我需要启动 Oracle NoSQL shell 并运行一些 DDL。

我写了 shell 脚本。

#Run Client
java -jar /root/software/kv-3.2.5/lib/kvcli.jar -host localhost -port 5000

#Run scripts
plan remove-table -name PersonnelUni1To1FK -wait
plan remove-table -name HabitatUni1To1FK -wait

当我从终端执行相同的操作时,它工作正常。因为在第一个命令数据库 shell 启动后,剩余的脚本在该 shell 上运行。

但在 Jenkins 中构建失败。

Jenkins 作业控制台输出:

+java -jar /root/software/kv-3.2.5/lib/kvcli.jar -host localhost -port 5000

kv-> + plan remove-table -name PersonnelUni1To1FK -wait /tmp/hudson2708562803834708095.sh:第 17 行:计划:找不到命令

构建步骤“执行 shell”将构建标记为失败

它试图在我的 ubuntu shell 上而不是在数据库 shell 上执行这一切。

【问题讨论】:

    标签: shell jenkins


    【解决方案1】:

    plan 是由shell 执行的命令,对吧?错误消息只是说它没有找到命令,所以问题可能是 PATH 变量的设置。如果在 shell 脚本中指定 plan 的绝对路径会发生什么?或者,确保 Jenkins 上的 PATH 变量是正确的。

    【讨论】:

    • plan remove-table -name PersonnelUni1To1FK -wait 命令在 Oracle NoSQL shell 而非我的 Os shell 上运行
    • 如果我从我的 ubuntu 终端(shell)触发plan remove-table -name PersonnelUni1To1FK -wait,它会说同样的 - “找不到命令”
    • 但是您正在从您的 shell 脚本运行 plan!当然,shell 找不到该命令。您需要将其输入 Oracle shell。例如,如果 Oracle shell 从 STDIN 读取命令,则需要将命令重定向到 Oracle shell 的 STDIN。
    • 您是否正确阅读了问题?我建议再读一遍。忘记plan。假设我在 Oracle NoSQL shell 上触发 create table abc (col1 int) 脚​​本。
    • 抱歉,我明白了您想知道的问题,为什么会出现command not found 错误,以及如何处理它。
    【解决方案2】:

    作为一种解决方法,

    我把所有的脚本都放了

    plan remove-table -name PersonnelUni1To1FK -wait
    plan remove-table -name HabitatUni1To1FK -wait
    
    and many more...
    

    在文件/home/dev/ons/oracle-kv-db.script

    为 jenkins 作业修改的 shell 命令

    java -jar /root/software/kv-3.2.5/lib/kvcli.jar -host localhost -port 5000 < /home/dev/ons/oracle-kv-db.script

    现在它不需要明确的数据库外壳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多