【问题标题】:Getting RVM to work with Jenkins Pipeline让 RVM 与 Jenkins 流水线一起工作
【发布时间】:2017-04-20 06:42:31
【问题描述】:

所以我正在尝试设置一个 Jenkins 声明式管道来运行 Xcode 构建作业。我想使用 xcpretty Ruby gem,但以后还需要其他几个 Ruby gem 来完成其他工作。

stage('Pre-Build')
{
    steps
    {
        echo "Executing Pre-Build steps ..."
        sh(returnStdout: true, script: "#!/bin/bash -xle && source ~/.rvm/scripts/rvm && rvm use 2.3.1 && cd ${WORKSPACE}/${env.PROJECT_PATH} && gem install xcpretty && set -o pipefail && xcpretty")
    }
}

首先,我在 Pre-Build 阶段没有得到 sh 的回声。 returnStdout: true 和 hashbang 似乎对从 shell 调用获取任何日志输出都没有任何影响。

这让我对这里发生的事情视而不见。运行作业时,预构建阶段通过,然后在我想使用 xcpretty 的实际构建阶段失败。

这是 Pre-Build 阶段的日志输出:

Executing Pre-Build steps ...
[Pipeline] script
[Pipeline] {
[Pipeline] sh
[job] Running shell script
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo

如果我在 bash 中手动运行它,没问题!在 Jenkins 上,似乎有些东西不适用于 RVM,但我在黑暗中摸索了好几天,试图解决这个问题,这让我发疯了。

感谢任何帮助!

【问题讨论】:

  • 为此使用 docker。
  • 怎么样?想详细说明一下吗? (抱歉,我是 Docker 新手)。
  • 构建一个包含所有 gem 的 Docker 镜像,然后使用 Jenkins Docker Pipeline 插件启动它。
  • 好的,但是对于 Docker 映像之外的任何依赖项(例如 Xcode 工具),这是否可以正常工作?
  • 我刚刚查看了xcpretty github页面,它不依赖于Xcode工具;它只是操纵他们的标准输出。

标签: ruby bash jenkins groovy continuous-integration


【解决方案1】:

Michał Knapik 有一篇博客文章介绍了一个手动解决方案,该解决方案定义了一个复制 rvm use 语义的 groovy 包装器

见:

https://blog.knapik.me/how-to-use-rvm-with-jenkins-pipeline/

node {
    withRvm('ruby-2.3.1') {
        sh 'ruby --version'
        sh 'gem install rake'
    }
}

我不想复制这个例子 - 这是他的代码。

注意指定版本的注意事项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2023-03-19
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多