【发布时间】:2020-06-24 13:22:56
【问题描述】:
深呼吸好吧,就这样吧。尝试支持两个版本的 ruby 以在 TeamCity 中运行黄瓜测试,因为我们正在将对测试框架的 Ruby 支持从 2.3.3 升级到 2.7.0
Ruby 环境配置器:设置为使用带有参数化解释器名称和 gemset 的 RVM。
解释器名称: ruby 解释器使用默认设置为 2.3.3 的参数,但构建步骤通过将 .ruby-version 'cat' 到 teamcity 参数来确定它。下一步的想法将随着它的发展而改变。我们将其设置为 ruby-%rvm.ruby%,默认设置为 2.3.3。
Gemset: gemset 设置为 %teamcity.build.id%。
构建步骤 1-4: 做与此无关的东西
构建步骤 5。 通过将 .ruby-version 文件添加到 teamcity 参数中来设置 ruby 版本
构建步骤 6: Bundler。我安装了两个版本的 bundler 来处理我们对使用我们框架的旧测试项目的并行支持(希望如此),这些项目都使用类似 1.17.1 的 bundler 和使用 2.1.4 的新测试项目。然后我运行bundle install,它应该使用 Gemfile.lock 中定义的版本来进行捆绑。我在这里注意到的一件事是像 nokogiri 这样的 gem 安装得太快了。我已经习惯了这件事需要几十秒,它会在 8 内完成。
构建步骤 7-9: 无关
构建步骤 10: 执行测试。这是问题的实质。我正在使用具有以下配置的 rake runner:
rake 任务:我们定义的 rake 任务,用于运行带有大量自定义内容的 cucumber
额外的 Rake 命令行参数: 只是在我们的自定义 rake 任务中添加更多参数
模式: RVM 解释器
RVM 解释器: ruby-%rvm.ruby%
RVM Gemset: %teamcity.build.id% 想法是捆绑安装步骤使用与 Ruby 环境配置器定义的相同的 RVM 解释器和 gemset。
Bundler:我们检查bundle exec
各种其他设置:跟踪调用/执行阶段,带有附加选项的黄瓜
正是这一步失败了。这是我所看到的:
[08:54:34]Step 10/17: 8. Execute Tests (Rake) (4s)
[08:54:38][Step 10/17] Environment variable 'GEM_HOME' has predefined value '/usr/local/rvm/gems/ruby-2.7.0@11969694'. It may affect runtime build behaviour because TeamCity RVM support won't override it.
[08:54:38][Step 10/17] Environment variable 'GEM_PATH' has predefined value '/usr/local/rvm/gems/ruby-2.7.0@11969694:/usr/local/rvm/gems/ruby-2.7.0@global'. It may affect runtime build behaviour because TeamCity RVM support won't override it.
[08:54:38][Step 10/17] Environment variable 'MY_RUBY_HOME' has predefined value '/usr/local/rvm/rubies/ruby-2.7.0'. It may affect runtime build behaviour because TeamCity RVM support won't override it.
[08:54:38][Step 10/17] Environment variable 'IRBRC' has predefined value '/usr/local/rvm/rubies/ruby-2.7.0/.irbrc'. It may affect runtime build behaviour because TeamCity RVM support won't override it.
[08:54:38][Step 10/17] Cucumber Options: features --expand --format json --out ./Logs/cucumber_report.json --expand --format Teamcity::Cucumber::Formatter
[08:54:38][Step 10/17] Starting: /bin/sh /opt/buildAgent/temp/agentTmp/build4928453681402755736.sh
[08:54:38][Step 10/17] in directory: /opt/buildAgent/work/423ccd9741f6c2a4
[08:54:38][Step 10/17] Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0
[08:54:38][Step 10/17] Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0
[08:54:38][Step 10/17] Ignoring jaro_winkler-1.5.4 because its extensions are not built. Try: gem pristine jaro_winkler --version 1.5.4
[08:54:38][Step 10/17] Ignoring json-1.8.6 because its extensions are not built. Try: gem pristine json --version 1.8.6
[08:54:38][Step 10/17] Ignoring malloc_trim-0.1.0 because its extensions are not built. Try: gem pristine malloc_trim --version 0.1.0
[08:54:38][Step 10/17] Ignoring nokogiri-1.10.9 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.9
[08:54:38][Step 10/17] Ignoring unf_ext-0.0.7.7 because its extensions are not built. Try: gem pristine unf_ext --version 0.0.7.7
[08:54:38][Step 10/17] Could not find unf_ext-0.0.7.7 in any of the sources
[08:54:38][Step 10/17] Run `bundle install` to install missing gems
[08:54:38][Step 10/17] Process exited with code 7
[08:54:38][Step 10/17] Process exited with code 7 (Step: 8. Execute Tests (Rake))
[08:54:38][Step 10/17] Step 8. Execute Tests (Rake) failed
我对此感到茫然。我在一个步骤中添加了从我们的框架运行一个新的自定义 rake 任务,它所做的只是吐出rvm gemset list 的输出,并且至少对于在我们的 TeamCity 配置中执行的那个 rake 任务,它看起来像是在使用正确/预期的 gemset和 ruby 版本,所以我假设我们执行 cucumber 的 rake 任务也使用了正确的 gemset。我们的捆绑安装步骤也吐出rvm gemset list,它在那里看起来也正确。
让我印象深刻的一件事是那些“环境变量'X'具有预定义值”警告。但他们都引用了 ruby 2.7.0 和正确的 gemset,所以我不确定这是否是问题所在。
哦,如果我设置了一个步骤来通过命令行执行它们,它会更进一步,但尝试使用 teamcity/cucumber/formatter 失败。因此,将其作为 rake 任务运行会导致对需要系统库或扩展的 gem 感到非常困惑?
最后我会注意到,当我运行 2.3.3 测试项目时,它运行良好。完全没有问题。它也有那些“预定义值”警告......嗯......前两个。 2.3.3 不会吐出 MY_RUBY_HOME 和 IRBRC 警告。
如果有人有什么好主意,我会全力以赴。谢谢!!!!
[编辑]
我在我的捆绑安装步骤结束时尝试了bundle exec gem pristine --all 并收到此错误。
[09:27:13] [Step 6/17] Building native extensions. This could take a while...
[09:27:13] [Step 6/17] ERROR: While executing gem ... (Gem::Ext::BuildError)
[09:27:13] [Step 6/17] ERROR: Failed to build gem native extension.
[09:27:13] [Step 6/17]
[09:27:13] [Step 6/17] current directory: /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/unf_ext-0.0.7.7/ext/unf_ext
[09:27:13] [Step 6/17] /usr/local/rvm/rubies/ruby-2.7.0/bin/ruby -I /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0 -r ./siteconf20200624-747-1iuwizi.rb extconf.rb
[09:27:13] [Step 6/17] /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/spec_set.rb:86:in `block in materialize': Could not find unf_ext-0.0.7.7 in any of the sources (Bundler::GemNotFound)
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/spec_set.rb:80:in `map!'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/spec_set.rb:80:in `materialize'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/definition.rb:170:in `specs'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/definition.rb:237:in `specs_for'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/definition.rb:226:in `requested_specs'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/runtime.rb:101:in `block in definition_method'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/runtime.rb:20:in `setup'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler.rb:149:in `setup'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/setup.rb:20:in `block in <top (required)>'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/ui/shell.rb:136:in `with_level'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/ui/shell.rb:88:in `silence'
[09:27:13] [Step 6/17] from /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/bundler-2.1.4/lib/bundler/setup.rb:20:in `<top (required)>'
[09:27:13] [Step 6/17] from /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
[09:27:13] [Step 6/17] from /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
[09:27:13] [Step 6/17]
[09:27:13] [Step 6/17] extconf failed, exit code 1
[09:27:13] [Step 6/17]
[09:27:13] [Step 6/17] Gem files will remain installed in /usr/local/rvm/gems/ruby-2.7.0@11969897/gems/unf_ext-0.0.7.7 for inspection.
[09:27:13] [Step 6/17] Results logged to /usr/local/rvm/gems/ruby-2.7.0@11969897/extensions/x86_64-linux/2.7.0/unf_ext-0.0.7.7/gem_make.out
[09:27:13] [Step 6/17] Could not find unf_ext-0.0.7.7 in any of the sources
[09:27:13] [Step 6/17] Could not find unf_ext-0.0.7.7 in any of the sources
这很有趣。 “Gem 文件将保持安装在”这一行似乎表明了正确的 gem 位置,但这就像 bundle install 说它有效但......不是真的?
gem env 也来自我的捆绑安装构建步骤:
[09:26:44] [Step 6/17] RubyGems Environment:
[09:26:44] [Step 6/17] - RUBYGEMS VERSION: 3.1.2
[09:26:44] [Step 6/17] - RUBY VERSION: 2.7.0 (2019-12-25 patchlevel 0) [x86_64-linux]
[09:26:44] [Step 6/17] - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.7.0@11969897
[09:26:44] [Step 6/17] - USER INSTALLATION DIRECTORY: /home/vcsservice/.gem/ruby/2.7.0
[09:26:44] [Step 6/17] - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.7.0/bin/ruby
[09:26:44] [Step 6/17] - GIT EXECUTABLE: /usr/bin/git
[09:26:44] [Step 6/17] - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.7.0@11969897/bin
[09:26:44] [Step 6/17] - SPEC CACHE DIRECTORY: /home/vcsservice/.gem/specs
[09:26:44] [Step 6/17] - SYSTEM CONFIGURATION DIRECTORY: /etc
[09:26:44] [Step 6/17] - RUBYGEMS PLATFORMS:
[09:26:44] [Step 6/17] - ruby
[09:26:44] [Step 6/17] - x86_64-linux
[09:26:44] [Step 6/17] - GEM PATHS:
[09:26:44] [Step 6/17] - /usr/local/rvm/gems/ruby-2.7.0@11969897
[09:26:44] [Step 6/17] - /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0
[09:26:44] [Step 6/17] - GEM CONFIGURATION:
[09:26:44] [Step 6/17] - :update_sources => true
[09:26:44] [Step 6/17] - :verbose => true
[09:26:44] [Step 6/17] - :backtrace => false
[09:26:44] [Step 6/17] - :bulk_threshold => 1000
[09:26:44] [Step 6/17] - REMOTE SOURCES:
[09:26:44] [Step 6/17] - https://rubygems.org/
[09:26:44] [Step 6/17] - SHELL PATH:
[09:26:44] [Step 6/17] - /usr/local/rvm/gems/ruby-2.7.0@11969897/bin
[09:26:44] [Step 6/17] - /usr/local/rvm/gems/ruby-2.7.0@global/bin
[09:26:44] [Step 6/17] - /usr/local/rvm/rubies/ruby-2.7.0/bin
[09:26:44] [Step 6/17] - /usr/local/rvm/bin
[09:26:44] [Step 6/17] - /usr/local/bin
[09:26:44] [Step 6/17] - /usr/bin
[09:26:44] [Step 6/17] - /usr/local/sbin
[09:26:44] [Step 6/17] - /usr/sbin
[09:26:44] [Step 6/17] - /home/vcsservice/.dotnet/tools
[09:26:44] [Step 6/17] - /home/vcsservice/.local/bin
[09:26:44] [Step 6/17] - /home/vcsservice/bin
[09:26:44] [Step 6/17] - /home/vcsservice/.npm-global/bin
[09:26:44] [Step 6/17] - /usr/local/bin
[编辑 2]
尝试了以下来自 Luke Hill 的建议,以确保我们在 rake 任务中执行bundle & bundle exec,然后调用运行黄瓜(通过parallel_tests gem)。它已经在做bundle exec,但我在它之前添加了bundle &。还添加了一些代码以吐出rvm gemset list。看起来它甚至没有走那么远。它甚至无法执行 TeamCity 尝试执行的基本 rake 任务,因此我对该 rake 任务中事物的调用没有实际意义。
【问题讨论】: