TeamCity Rake任务来执行黄瓜测试:由于未构建<gem>扩展名,因此忽略了<gem>

时间:2020-06-24 13:22:56

标签: ruby cucumber teamcity

深呼吸好,就这样。尝试支持两个版本的ruby在TeamCity中运行黄瓜测试,因为我们将对测试框架的Ruby支持从2.3.3升级到2.7.0

Ruby环境配置器:设置为使用带有参数化解释器名称和gemset的RVM。

解释器名称: ruby​​解释器使用的参数默认情况下设置为2.3.3,但是构建步骤通过将.ruby-version转换为teamcity参数来确定它。下一步的想法将随着变化的进行。我们将其设置为ruby-%rvm.ruby%,默认情况下设置为2.3.3。

宝石集:宝石集设置为%teamcity.build.id%。

构建步骤1-4:进行与此无关的事情

构建步骤5。通过将.ruby-version文件编入teamcity参数来设置红宝石版本

构建步骤6:捆绑器。我安装了两个版本的bundler,以使用我们的框架(希望)处理对较早测试项目的并行支持,它们都使用1.17.1的bundler和使用2.1.4的较新测试项目。然后我运行bundle install,它应该使用Gemfile.lock中定义的版本进行捆绑。我要注意的一件事是,像nokogiri这样的宝石安装WAY的速度太快。我已经习惯了花费数十秒才能完成的工作,并且完成的时间大约是8点。

构建步骤7-9:不相关

构建步骤10:执行测试。这是问题的症结所在。我正在使用具有以下配置的耙子:

rake任务:我们已定义的rake任务,用于运行带有大量自定义内容的黄瓜

其他Rake命令行参数:我们的自定义rake任务中只有更多参数

模式: RVM解释器

RVM解释器: ruby​​-%rvm.ruby%

RVM Gemset:%teamcity.build.id%的想法是,捆绑包安装步骤使用了与Ruby Environment Configurator定义的相同的RVM解释器和gemset。

捆绑软件:我们选中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任务来说,它看起来像是在使用正确的/预期的宝石和红宝石版本,因此我假设执行黄瓜的rake任务也使用了正确的宝石。我们的捆绑软件安装步骤还请出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位置,但这就像捆绑安装说明有效,但是...不是吗?

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)的建议,以确保我们在完成耙任务中bundle & bundle exec之后,该任务要求运行黄瓜(通过parallel_tests gem)。它已经在做bundle exec,但是我在它之前添加了bundle &。还添加了一些代码以吐出rvm gemset list。似乎还没走那么远。甚至无法执行TeamCity尝试执行的基本rake任务,因此我对该rake任务中的内容的呼唤无济于事。

2 个答案:

答案 0 :(得分:0)

您是通过全局安装还是本地安装来运行Cucumber。特别是在rvm环境中,请确保通过捆绑程序运行它,以确保获得正确的版本匹配。

然后确保您重新运行bundle,甚至可以将其作为链式任务运行,以确保它bundle && bundle exec cucumber

答案 1 :(得分:0)

欢迎。一个非常奇怪的解决方案。我删除并重新创建了用于测试执行情况的TeamCity Rake构建步骤,将RVM解释器更改为默认值(遵循Ruby Environment Configurator设置-之前我将插入器设置为特定参数)并且做到了!

我尝试将现有Rake构建步骤默认编辑为RVM Interpreter,而DIDN则无法修复。

有关创建全新构建步骤的问题已将其修复。奇怪。