ruby - 让 RVM 与 Jenkins Pipeline 配合使用

标签 ruby bash jenkins groovy continuous-integration

因此,我尝试设置 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")
    }
}

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

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

这是预构建阶段的日志输出:

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 似乎有些东西不起作用,但我在黑暗中敲击了几天,试图修复这个问题,这让我发疯。

感谢任何帮助!

最佳答案

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'
    }
}

除了这个示例之外,我不想复制任何其他内容 - 这是他的代码。

注意指定版本的注意事项

关于ruby - 让 RVM 与 Jenkins Pipeline 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43512066/

相关文章:

linux - 在 macOS Sierra 上的 sh 文件中为单个命令禁用 sudo

linux:/dev/null/: 是一个目录

bash - 使用shell脚本查找用户是否登录

ruby - 我可以在开始的项目中以 TDD 或 BDD 为目标吗?

RUBY:如何解决常量定义中的循环依赖?

ruby-on-rails - heroku上传错误无法检测rake任务

perl - 在 Jenkins 中运行并行作业

Ruby 1.9.2 - 读取和解析远程 CSV

docker - Docker 中的 Jenkins Docker 流水线

continuous-integration - 在 Jenkins 持续集成测试系统中向 Oracle Grid Engine 提交作业