使用Jenkins CI在Docker Container中运行自动Selenium Nightwatch.jstesting
我的自动化testing基于Nightwatch-Cucumber
和Nightwatch.js
。 我创build了Dockerfile,并将构build好的Docker镜像推送到Docker Cloud。
目前我使用Nightwatch-Cucumber
和Nightwatch.js
进行的自动化testing将在我创build的Docker图像/容器上的无头Chrome
上通过GitLab CI
成功执行。 所以我创build了一个gitlab-ci.yml
:
image: "grme/nightwatch-chrome-firefox:0.0.1" stages: - "chrome-tests" before_script: - "npm install" - "npm install -y nightwatch-cucumber@7.1.10" - "npm install -y chromedriver@2.30.1" - "npm install -y geckodriver@1.7.1" - "npm install -y cucumber-html-reporter@2.0.3" - "npm install -y multiple-cucumber-html-reporter@0.2.0" cache: paths: - node_modules/ run-tests-on-chrome: stage: "chrome-tests" script: - "xvfb-run --server-args='-screen 0 1600x1200x24' npm run test-chrome" only: - "master@xxx/e2e-web-tests"
现在我想把这个testing执行移植到Jenkins CI
。 所以,我想以与GitLab CI
相同的方式执行我的testing。
起初我想用一个本地Jenkins CI
实例来执行我的testing。 我想创造两个工作:
- 执行testing项目的推送testing(相当于当前的
GitLab CI
解决scheme) - 通过
Jenkins CI
手动启动testing - 通过
Jenkins CI
的时间触发来执行testing
如果testing未通过,我希望构build失败,并且希望在每次执行Cucumber Report Jenkins Plugin
后创build一个Cucumber
报告。
我的第一个想法是创build一个shell脚本启动容器,并在容器中执行testing。 但是我没有得到回Jenkins CI
testing结果呢?
Nightwatch.js
的过程与Selenium的Java实现不同。 所以,我第一次使用Nightwatch.js 。 Nightwatch.jstesting必须在Docker容器内执行,testing结果必须返回给Jenkins CI 。
另外,我可以在我创build的Docker容器中运行Jenkins,但我想分开它。 jenkins应该是一个修复实例,只需要在Docker容器上启动testing。
但是我怎么能意识到呢? 你怎么会意识到我的设置?
我不完全确定Jenkins CI是如何工作的,但是我可以在Jenkins中运行一个docker容器,它带有入口nightwatch
(所以它运行nightwatch,然后停止容器),并得到结果作为输出。 简单地docker run [containername]
将做的伎俩。 如果将junit.xml作为输出,则可以使用docker docker cp [containername]:[absolute_path_to_file_in_container] [destination]
,即使从已停止的容器中,
还有Jenkins插件可用于分析该junit文件,它可以设置作业状态并发布结果。
- Docker映像层次结构
- 在主机networking上使用docker容器,而不共享主机的IP
- 引用volumes_from中另一个docker-compose文件的服务
- docker版社区版是否可用于docker版1.12?
- docker-compose mysql容器拒绝访问wordpress容器
- restcomm phusion baseimage runsv无法启动./run:文件不存在
- 如何赋予docker容器在映射卷上写入/ chmod权限?
- 如何将文件夹从Dockerfile复制到Docker镜像?
- on docker image level = error msg =“无法closurestar编写器:io:在closures的pipe道上读/写”