无法在jenkins管道中调用参数包含空格的ruby rake

tpgth1q7  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(129)

我 有 Jenkins Pipeline , 它 将 使用 我 的 ruby 的 应用 程序 映像 部署 一 个 带有 容器 的 pod , 并且 有 一 个 阶段 将 从 $COMMAND 参数 运行 rake 命令 , 如下 所 示 :rake db_command:count_data[histories,status IN ("active","pending")] 在 容器 内 。
这 是 我 在 我 的 舞台 上 写 的 从 $COMMAND 参数 运行 rake 命令 的 步骤 :

stage("Rake Task") {
            try {
                container("ruby-rake-task") {   
                  sh '''
                    cd /var/www/mos
                    ${COMMAND}
                  '''
                }
            } catch(e) {
                echo "rake failed"
                sh "exit 1"
            }
        }

中 的 每 一 个
但是 我 从 控制 台 输出 中 得到 这个 错误 jenkins :

+ cd /var/www/mos
+ rake 'db_command:count_data[histories,status' IN '("active","pending")]'
rake aborted!
Don't know how to build task 'db_command:count_data[histories,status' (See the list of available tasks with `rake --tasks`)
/usr/local/bundle/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
(See full trace by running task with --trace)

格式
看 起来 jenkins 或 groovy 不会 将 rake 命令 作为 一 个 完整 的 命令 来 执行 , 而是 将 命令 拆分 为 三 个 部分 。 jenkins 总是 在 ' rake ' 命令 后 为 所有 参数 提供 一 个 引号 , 当 参数 包含 空格 时 , 这 真 的 很 难 。
我 已经 试 着 这样 调整 我 的 舞台 步 :

stage("Rake Task") {
            try {
                container("ruby-rake-task") {   
                  sh "cd /var/www/mos"
                  def rakeTask = $/eval ${COMMAND}/$
                  resultRake = sh(script: "${rakeTask}", returnStdout: true).toString()
                  echo "${resultRake}"
                }
            } catch(e) {
                echo "rake failed"
                sh "exit 1"
            }
        }

格式
然而 结果 是 产生 另 一 个 类似 这样 的 错误 :

[Pipeline] stage
[Pipeline] { (Rake Task)
[Pipeline] container
[Pipeline] {
[Pipeline] sh
+ cd /var/www/mos
[Pipeline] sh
/home/jenkins/agent/workspace/RUBY-APP-RAKE-TASK@tmp/durable-c0e8d0d4/script.sh: line 1: syntax error: unexpected "("
[Pipeline] }
[Pipeline] // container

格式
我 需要 做 些 什么 才 能 把 这个 rake 任务 作为 一 个 整体 来 运行 , 这个 命令 包括 了 spaces 参数 ? 有人 能 告诉 我 我 在 这里 遗漏 了 什么 吗 ?
谢谢 你 , 谢谢 你

d7v8vwbk

d7v8vwbk1#

我使用了一个带有入口点“bash”的节点容器,并解决了类似您的错误。我为您调整了它:

"-c \"cd /var/www/mos && ${command}\""

希望能帮上忙。

相关问题