【问题标题】:TeamCity Rake task to execute cucumber tests: Ignoring <gem> because its extensions are not built执行黄瓜测试的 TeamCity Rake 任务:忽略 <gem> 因为它的扩展未构建
【发布时间】: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 &amp; bundle exec,然后调用运行黄瓜(通过parallel_tests gem)。它已经在做bundle exec,但我在它之前添加了bundle &amp;。还添加了一些代码以吐出rvm gemset list。看起来它甚至没有走那么远。它甚至无法执行 TeamCity 尝试执行的基本 rake 任务,因此我对该 rake 任务中事物的调用没有实际意义。

【问题讨论】:

    标签: ruby cucumber teamcity


    【解决方案1】:

    您是从全局安装还是本地安装运行黄瓜。尤其是在 rvm 环境中,请确保通过 bundler 运行它以确保获得正确的版本匹配。

    然后确保你重新运行 bundle 甚至作为一个链式任务以确保它工作,即 bundle &amp;&amp; bundle exec cucumber

    【讨论】:

    • 这是一个很好的问题,我们通过执行它们的 rake 任务通过 parallel_tests 运行黄瓜。我会看看我是否无法更新执行此操作的 rake 任务以使用 bundle exe。我会在这里更新它是否有效!
    • 我们正在通过 bundle exec 执行 teamcity rake 任务,而不是执行该 rake 任务中发生的 parallel_tests。我想知道是不是这样。肯定会尽快尝试修改。
    • 没关系,我错了。我们到处都在做 bundle exec。我将尝试在 TeamCity 调用的执行 rake 任务中添加一些其他内容,以吐出 rvm gemset listgem env jsut 来覆盖我的基地。
    • 根据我上面的 EDIT 2,TeamCity 正在执行的 rake 任务甚至还不足以为我们的黄瓜执行执行 bundle &amp; bundle exe。执行 rake 任务 ITSELF 失败。 :\ 我已经告诉 TamCity 使用bundle exe 不过感谢您的建议!值得一试
    • 好了,我们找到了问题所在。作为提示,每当您收到 gem pristine 错误等信息时。检查你的包,强制重新安装并确保你只在你的 gem 包上运行命令。
    【解决方案2】:

    韦尔普。一个非常奇怪的解决方案。我删除并重新创建了执行测试的 TeamCity Rake 构建步骤,将 RVM 解释器更改为默认值(它遵循 Ruby 环境配置器设置 - 之前我将解释器设置为特定参数)并且做到了!

    我尝试将现有的 Rake 构建步骤编辑为默认的 RVM 解释器,但没有修复它。

    创建一个全新的构建步骤修复了它。奇怪。

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2015-08-23
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2017-01-30
      • 2011-02-06
      相关资源
      最近更新 更多