Gitlab: прохождение артефактов через задания и этапы - PullRequest
0 голосов
/ 23 января 2019

Я использую node.js mocha и selenium-webdriver для тестирования e2e. У меня есть разные этапы, такие как установка, кнопка проверки 1, кнопка проверки 2. На каждом этапе (кроме установки) есть 2 задания (для chrome и для safari). Моя цель, в конце концов, получить 1 текстовый файл с результатами тестов всех заданий всех этапов.

Я пробовал много разных конфигураций:

  1. всегда передавайте артефакт report.txt и запускайте ./mocha >> report.txt в каждом задании.
    • приводит к несогласованности данных в файле (не все задания записываются, частично записываются и т. Д.)
  2. всегда передают 2 артефакта report1.txt, report2.txt, поэтому задание для chrome write только в # 1, задание для сафари в # 2
    • вообще не работает, бог знает почему
  3. зависимости с 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

1 Ответ

0 голосов
/ 01 февраля 2019

В опубликованном вами файле есть как минимум пара возможных проблем:

  1. artifacts.name не определено, поэтому будет использоваться строка "артефактов" по умолчанию. Это создает риск перезаписи одного файла артефакта другим, когда на одном хосте параллельно выполняется несколько заданий. Определите пользовательские артефакты: имя для исправления перезаписей.

  2. Если вы храните report.txt в той же папке, переименуйте его, прежде чем завершить работу, чтобы файл отчета не был перезаписан на вашем этапе работы report, где все запрошенные архивы артефактов будут распакованы в то же место.

  3. Похоже, что ни одно из заданий (запуск, качество, язык) экспорт report.txt файл. Добавьте report.txt вместе с папкой screenshots для ее экспорта.

  4. Снимки экрана (и отчеты) будут экспортированы только при сбое задания. Если это не желаемое поведение, измените артефактов: когда на on_success или always

  5. Весь конвейер завершится неудачей, если не выполнится одно из тестовых заданий. Если этот конвейер предназначен только для тестирования и экспорта результатов, вам следует разрешить сбой тестовых заданий без сбоя всего конвейера с помощью allow_failure

Подводя итог всему написанному выше, вот предложенный измененный файл yml:

stages:
  - install
  - test
  - report

#
# Templates
#

# Tags can't be defined on a global scope for now
# Ref: https://gitlab.com/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.

...