深呼吸好,就这样。尝试支持两个版本的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任务中的内容的呼唤无济于事。
答案 0 :(得分:0)
您是通过全局安装还是本地安装来运行Cucumber。特别是在rvm环境中,请确保通过捆绑程序运行它,以确保获得正确的版本匹配。
然后确保您重新运行bundle
,甚至可以将其作为链式任务运行,以确保它bundle && bundle exec cucumber
答案 1 :(得分:0)
欢迎。一个非常奇怪的解决方案。我删除并重新创建了用于测试执行情况的TeamCity Rake构建步骤,将RVM解释器更改为默认值(遵循Ruby Environment Configurator设置-之前我将插入器设置为特定参数)并且做到了!
我尝试将现有Rake构建步骤默认编辑为RVM Interpreter,而DIDN则无法修复。
有关创建全新构建步骤的问题已将其修复。奇怪。