Gitlab:通过工作和阶段传递文物
我使用Node.js的摩卡和硒的webdriver的端到端测试。我有不同的阶段,如安装,测试按钮1,测试按钮2.每一阶段(除了安装)有2个作业(铬和用于狩猎)。我的目标,最终,得到来自各个阶段的所有作业试验结果1个txt文件。
我尝试了许多不同的配置:
- 总是传递神器report.txt文件,并在每个作业运行./mocha >> REPORT.TXT。 导致文件(未所有作业写入,部分罗滕等)不一致的数据
- 总是传递2个文物REPORT1.TXT,REPORT2.TXT,所以这项工作对铬只写在#1,作业在#2的Safari浏览器 不工作的时候,天知道为什么
- 带2米的工件REPORT1.TXT,REPORT2.TXT依赖性 对于产生在安装阶段没有传递给下一阶段的某些原因神器node_modules。
我没有再例子此设置,他们是乱,但我给你我.gitlab-ci.yml的例子也许你可以帮我一下吧。
stages:
- install
- startup
- quality
- language
- report
.chrome_template: &chrome_template
environment:
name: chrome
variables: &chrome_template_var
SELENIUM_BROWSER: chrome
tags:
- "macbook"
.safari_template: &safari_template
environment:
name: safari
variables: &safari_template_var
SELENIUM_BROWSER: safari
tags:
- "macbook"
# install job
install:
stage: install
tags:
- "macbook"
script:
- npm install
artifacts:
paths:
- node_modules/
except:
- tags
# testing jobs
.startup: &startup
stage: startup
variables: &startup-var
SPEC: startup
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot
.quality: &quality
stage: quality
variables: &quality-var
SPEC: quality
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot/
.language: &language
stage: language
variables: &language-var
SPEC: language
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot/
startup:chrome:
<<: *startup
<<: *chrome_template
variables:
<<: *startup-var
<<: *chrome_template_var
language:chrome:
<<: *language
<<: *chrome_template
variables:
<<: *language-var
<<: *chrome_template_var
quality:chrome:
<<: *quality
<<: *chrome_template
variables:
<<: *quality-var
<<: *chrome_template_var
startup:safari:
<<: *startup
<<: *safari_template
variables:
<<: *startup-var
<<: *safari_template_var
language:safari:
<<: *language
<<: *safari_template
variables:
<<: *language-var
<<: *safari_template_var
quality:safari:
<<: *quality
<<: *safari_template
variables:
<<: *quality-var
<<: *safari_template_var
report:
stage: report
tags:
- "macbook"
script:
- cat *.txt > report.txt
artifacts:
paths:
- report.txt
回答如下:
至少有几个您发布的文件中可能出现的问题:
artifacts.name
没有定义,因此默认的“神器”的字符串将被使用。这对覆盖一个伪文件与其他多个作业时,在同一台主机上并行运行的风险。定义自定义artifacts:name修复覆盖。- 如果在同一个文件夹存放
report.txt
,那么请在完成工作之前将其重命名,所以报告文件不会将您的report
阶段的工作,所有的请求的神器档案将被解压到同一位置被覆盖。 - 好像没有工作(启动,质量,语言)出口
report.txt
文件。添加report.txt
与screenshots
文件夹一起导出。 - 截图(和报告)将在作业失败,只能出口。如果这不是想要的行为,改变artifacts:when到
on_success
或always
- 如果测试工作的人会失败,整个管道失败。如果这条管道大约只有测试和出口的结果,你应该让测试作业不会失败与allow_failure整个管道失败
总结上面的一切写的,这里的提出改变了YML文件:
stages:
- install
- test
- report
#
# Templates
#
# Tags can't be defined on a global scope for now
# Ref: https://gitlab/gitlab-org/gitlab-ce/issues/23434
.default: &default
tags: ['macbook']
.node_modules:
artifacts: &node_modules
paths: ['node_modules']
when: always
.test_reports:
artifacts: &test_reports
paths:
- screenshot
- reports
when: always
.chrome_template: &chrome_template
environment:
name: chrome
variables: &chrome_template_var
SELENIUM_BROWSER: chrome
.safari_template: &safari_template
environment:
name: safari
variables: &safari_template_var
SELENIUM_BROWSER: safari
#
# Jobs
#
# Install
install:
<<: *default
stage: install
except: ['tags']
script:
- npm install
artifacts: *node_modules
# Test
.test: &test
<<: *default
stage: test
script:
- npm run test
# Move report to individual file to fix overwriting it by other artifacts
- mkdir -p reports
- mv report.txt reports/report_${CI_JOB_NAME}.txt
retry: 1
artifacts: *test_reports
# Allow tests to fail, exporting artifacts to the final stage
allow_failure: true
.test_startup: &test_startup
<<: *test
variables: &startup_var
SPEC: startup
.test_quality: &test_quality
<<: *test
variables: &quality_var
SPEC: quality
.test_language: &test_language
<<: *test
variables: &language_var
SPEC: language
test:startup:chrome:
<<: *test_startup
<<: *chrome_template
variables:
<<: *startup_var
<<: *chrome_template_var
test:language:chrome:
<<: *test_language
<<: *chrome_template
variables:
<<: *language_var
<<: *chrome_template_var
test:quality:chrome:
<<: *test_quality
<<: *chrome_template
variables:
<<: *quality_var
<<: *chrome_template_var
test:startup:safari:
<<: *test_startup
<<: *safari_template
variables:
<<: *startup_var
<<: *safari_template_var
test:language:safari:
<<: *test_language
<<: *safari_template
variables:
<<: *language_var
<<: *safari_template_var
test:quality:safari:
<<: *test_quality
<<: *safari_template
variables:
<<: *quality_var
<<: *safari_template_var
# Report
report:
<<: *default
stage: report
script:
# Summarize reports before exporting
# Ignore errors when there are no reports to export
- cat reports/*.txt > report.txt | true
artifacts:
paths:
- screenshot
- report.txt
请检查多次失败的测试作业不会覆盖“屏幕截图”文件夹中的内容。否则,你需要为它与“一个report.txt”文件所做的相同方式移动截图。
Gitlab:通过工作和阶段传递文物
我使用Node.js的摩卡和硒的webdriver的端到端测试。我有不同的阶段,如安装,测试按钮1,测试按钮2.每一阶段(除了安装)有2个作业(铬和用于狩猎)。我的目标,最终,得到来自各个阶段的所有作业试验结果1个txt文件。
我尝试了许多不同的配置:
- 总是传递神器report.txt文件,并在每个作业运行./mocha >> REPORT.TXT。 导致文件(未所有作业写入,部分罗滕等)不一致的数据
- 总是传递2个文物REPORT1.TXT,REPORT2.TXT,所以这项工作对铬只写在#1,作业在#2的Safari浏览器 不工作的时候,天知道为什么
- 带2米的工件REPORT1.TXT,REPORT2.TXT依赖性 对于产生在安装阶段没有传递给下一阶段的某些原因神器node_modules。
我没有再例子此设置,他们是乱,但我给你我.gitlab-ci.yml的例子也许你可以帮我一下吧。
stages:
- install
- startup
- quality
- language
- report
.chrome_template: &chrome_template
environment:
name: chrome
variables: &chrome_template_var
SELENIUM_BROWSER: chrome
tags:
- "macbook"
.safari_template: &safari_template
environment:
name: safari
variables: &safari_template_var
SELENIUM_BROWSER: safari
tags:
- "macbook"
# install job
install:
stage: install
tags:
- "macbook"
script:
- npm install
artifacts:
paths:
- node_modules/
except:
- tags
# testing jobs
.startup: &startup
stage: startup
variables: &startup-var
SPEC: startup
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot
.quality: &quality
stage: quality
variables: &quality-var
SPEC: quality
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot/
.language: &language
stage: language
variables: &language-var
SPEC: language
script:
- npm run test
retry: 1
artifacts:
when: on_failure
paths:
- screenshot/
startup:chrome:
<<: *startup
<<: *chrome_template
variables:
<<: *startup-var
<<: *chrome_template_var
language:chrome:
<<: *language
<<: *chrome_template
variables:
<<: *language-var
<<: *chrome_template_var
quality:chrome:
<<: *quality
<<: *chrome_template
variables:
<<: *quality-var
<<: *chrome_template_var
startup:safari:
<<: *startup
<<: *safari_template
variables:
<<: *startup-var
<<: *safari_template_var
language:safari:
<<: *language
<<: *safari_template
variables:
<<: *language-var
<<: *safari_template_var
quality:safari:
<<: *quality
<<: *safari_template
variables:
<<: *quality-var
<<: *safari_template_var
report:
stage: report
tags:
- "macbook"
script:
- cat *.txt > report.txt
artifacts:
paths:
- report.txt
回答如下:
至少有几个您发布的文件中可能出现的问题:
artifacts.name
没有定义,因此默认的“神器”的字符串将被使用。这对覆盖一个伪文件与其他多个作业时,在同一台主机上并行运行的风险。定义自定义artifacts:name修复覆盖。- 如果在同一个文件夹存放
report.txt
,那么请在完成工作之前将其重命名,所以报告文件不会将您的report
阶段的工作,所有的请求的神器档案将被解压到同一位置被覆盖。 - 好像没有工作(启动,质量,语言)出口
report.txt
文件。添加report.txt
与screenshots
文件夹一起导出。 - 截图(和报告)将在作业失败,只能出口。如果这不是想要的行为,改变artifacts:when到
on_success
或always
- 如果测试工作的人会失败,整个管道失败。如果这条管道大约只有测试和出口的结果,你应该让测试作业不会失败与allow_failure整个管道失败
总结上面的一切写的,这里的提出改变了YML文件:
stages:
- install
- test
- report
#
# Templates
#
# Tags can't be defined on a global scope for now
# Ref: https://gitlab/gitlab-org/gitlab-ce/issues/23434
.default: &default
tags: ['macbook']
.node_modules:
artifacts: &node_modules
paths: ['node_modules']
when: always
.test_reports:
artifacts: &test_reports
paths:
- screenshot
- reports
when: always
.chrome_template: &chrome_template
environment:
name: chrome
variables: &chrome_template_var
SELENIUM_BROWSER: chrome
.safari_template: &safari_template
environment:
name: safari
variables: &safari_template_var
SELENIUM_BROWSER: safari
#
# Jobs
#
# Install
install:
<<: *default
stage: install
except: ['tags']
script:
- npm install
artifacts: *node_modules
# Test
.test: &test
<<: *default
stage: test
script:
- npm run test
# Move report to individual file to fix overwriting it by other artifacts
- mkdir -p reports
- mv report.txt reports/report_${CI_JOB_NAME}.txt
retry: 1
artifacts: *test_reports
# Allow tests to fail, exporting artifacts to the final stage
allow_failure: true
.test_startup: &test_startup
<<: *test
variables: &startup_var
SPEC: startup
.test_quality: &test_quality
<<: *test
variables: &quality_var
SPEC: quality
.test_language: &test_language
<<: *test
variables: &language_var
SPEC: language
test:startup:chrome:
<<: *test_startup
<<: *chrome_template
variables:
<<: *startup_var
<<: *chrome_template_var
test:language:chrome:
<<: *test_language
<<: *chrome_template
variables:
<<: *language_var
<<: *chrome_template_var
test:quality:chrome:
<<: *test_quality
<<: *chrome_template
variables:
<<: *quality_var
<<: *chrome_template_var
test:startup:safari:
<<: *test_startup
<<: *safari_template
variables:
<<: *startup_var
<<: *safari_template_var
test:language:safari:
<<: *test_language
<<: *safari_template
variables:
<<: *language_var
<<: *safari_template_var
test:quality:safari:
<<: *test_quality
<<: *safari_template
variables:
<<: *quality_var
<<: *safari_template_var
# Report
report:
<<: *default
stage: report
script:
# Summarize reports before exporting
# Ignore errors when there are no reports to export
- cat reports/*.txt > report.txt | true
artifacts:
paths:
- screenshot
- report.txt
请检查多次失败的测试作业不会覆盖“屏幕截图”文件夹中的内容。否则,你需要为它与“一个report.txt”文件所做的相同方式移动截图。