我正在建立一个连续的交付渠道,
到目前为止一切都很好。我已经设置Jenkins使用以下命令
执行shell脚本 sudo knife ec2 server create -r 'recipe[apt],recipe[java],recipe[mysql_install],recipe[tomcat],recipe[deploy_tests_from_github],recipe[configure_db],recipe[deploy-app],recipe[start_tests]' -V
部署顺利。唯一的问题是,当测试开始时,Chef似乎已关闭tomcat,因此Watir无法浏览到Web应用程序。
大部分食谱都是直接从Chef Supermarket克隆而来,我正在使用这本食谱来进行tomcat https://supermarket.chef.io/cookbooks/tomcat
我的start_test配方很简单
execute "start_test" do
command '/usr/local/bin/rake'
cwd '/Watir_tests/test'
end
这是我输出的一部分,
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0mRecipe: Deploy_App
::default[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com * service[tomcat7] action stop
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- stop service service[tomcat7][0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m * execute[wait for tomcat7] action run
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- execute sleep 5[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m * remote_file[MyApp.war] action create
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- create new file /var/lib/tomcat7/webapps/MyApp.war[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- update content in file /var/lib/tomcat7/webapps/MyApp.war from none to cd2ac4[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [37m(file sizes exceed 10000000 bytes, diff output suppressed)[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m * service[tomcat7] action start
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- start service service[tomcat7][0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m * execute[wait for tomcat7] action run
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [32m- execute sleep 5[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0mRecipe: start_tests::default[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com * execute[start_test] action run
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com ================================================================================[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [31mError executing action `run` on resource 'execute[start_test]'[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com ================================================================================[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m Mixlib::ShellOut::ShellCommandFailed[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com ------------------------------------[0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com Expected process to exit with [0], but received '1'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m ---- Begin output of /usr/local/bin/rake ----
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m STDOUT: Run options: --seed 62510
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m # Running:
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m EEEEEE
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m Finished in 330.793031s, 0.0181 runs/s, 0.0000 assertions/s.
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
Error:
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m LogInWithWrongPasswordTest#test_log_in_with_wrong_credentials:
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m **Watir::Exception::UnknownObjectException: unable to locate element, using {:id=>"logInform:userName", :tag_name=>"input or textarea", :type=>"(any text type)"}**
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /var/lib/gems/1.9.1/gems/watir-webdriver-0.8.0/lib/watir-webdriver/elements/element.rb:533:in `assert_element_found'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /var/lib/gems/1.9.1/gems/watir-webdriver-0.8.0/lib/watir-webdriver/elements/element.rb:505:in `assert_exists'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /var/lib/gems/1.9.1/gems/watir-webdriver-0.8.0/lib/watir-webdriver/user_editable.rb:32:in `clear'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /var/lib/gems/1.9.1/gems/watir-webdriver-0.8.0/lib/watir-webdriver/user_editable.rb:11:in `set'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /Watir_tests/Pages/LogInPage.rb:14:in `login'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m /Watrit_tests/test/log_in_with_wrong_password_test.rb:15:in `test_log_in_with_wrong_credentials'
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
ec2-52-88-49-226.us-west-2.compute.amazonaws.com [0m
如您所见,Watir无法找到网页元素,因为此时tomcat没有运行。
有没有其他人遇到这样的事情?有解决方案吗?
另请注意是否建议从Jenkins调用Knife ec2服务器创建命令。
谢谢。
答案 0 :(得分:0)
上面我的评论的长版本我会做(未经测试的代码,可能有拼写错误):
bash "Wait tomcat started" do
code << -EOH
for i in {1..10}; do
tail -n 100 /path/to/catalina.out | grep "Server Startup" && exit 0
sleep 20
done
exit 1
EOH
notifies :run,"execute[start_test]", :immediately
end
我们的想法是检查服务器是否已经完成启动(如果您的应用程序在日志中有问题,请在100最后一行日志中查看启动行),如果是,则通知测试启动,或者在200秒后通知测试失败( 10次,间隔20秒)
我认为(仍然未经测试)这样的事情也可以做得更清楚:
execute "tail -n 100 /path/to/catalina.out | grep "Server Startup" do
retries 10
retry_delay 20
notifies :run,'execute[start_test]', :immediately
end
答案 1 :(得分:0)
Or you can add test page and wait when tomcat has started
until (curl http://localhost:8080/status/ | grep "READY")
do sleep 10
done