我 有 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 参数 ? 有人 能 告诉 我 我 在 这里 遗漏 了 什么 吗 ?
谢谢 你 , 谢谢 你
1条答案
按热度按时间d7v8vwbk1#
我使用了一个带有入口点“bash”的节点容器,并解决了类似您的错误。我为您调整了它:
希望能帮上忙。