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