Bitbucket / я не вижу артефакты в конвейерах - PullRequest
0 голосов
/ 19 ноября 2018

Я запускаю тесты e2e в среде CI, но не вижу артефактов в конвейерах.

bitbucket-pipelines.yml:

image: cypress/base:10
options: max-time: 20
pipelines: 
  default: 
    -step: 
        script: 
            - npm install 
            -npm run test 
        artifacts: 
            -/opt/atlassian/pipelines/agent/build/cypress/screenshots/* 
            -screenshots/*.png

enter image description here

enter image description here

Возможно, я набрал неверный путь, но я не уверен.

У кого-нибудь есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 05 августа 2019

Рекурсивный поиск (/**) работал с Cypress 3.1.0 из-за дополнительной папки внутри videos и screenshots

# [...]
pipelines: 
  default: 
    - step:
      name: Run tests
      # [...]
      artifacts:
        - cypress/videos/** # Double star provides recursive search.
        - cypress/screenshots/** 
0 голосов
/ 28 ноября 2018

Я не думаю, что это где-то задокументировано, но artifacts принимает только относительный каталог из $BITBUCKET_CLONE_DIR. Когда я запускаю свой конвейер, он говорит: Cloning into '/opt/atlassian/pipelines/agent/build'..., поэтому я думаю, что артефакты относятся к этому пути. Я думаю, что если вы измените его на что-то вроде этого, он будет работать:

image: cypress/base:10
options: max-time: 20
pipelines: 
  default: 
    -step: 
        script: 
            - npm install 
            -npm run test 
        artifacts: 
            - cypress/screenshots/*.png

Редактировать

Из вашего комментария я теперь понимаю, в чем реальная проблема: конвейеры BitBucket настроены на останов при любом ненулевом коде выхода. Это означает, что выполнение конвейера останавливается, когда Cypress не проходит тесты. Поскольку артефакты хранятся после последнего шага конвейера, у вас не будет никаких артефактов.

Чтобы обойти это поведение, вы должны убедиться, что конвейер не останавливается, пока изображения не будут сохранены. Один из способов сделать это - поставить префикс npm run test перед set +e (для получения более подробной информации об этом решении, посмотрите на этот ответ здесь: https://community.atlassian.com/t5/Bitbucket-questions/Pipeline-script-continue-even-if-a-script-fails/qaq-p/79469). Это предотвратит остановку конвейера, но также гарантирует, что ваш конвейер всегда заканчивается! Что, конечно, не то, что вам нужно. Поэтому я рекомендую вам запускать кипарисные тесты отдельно и создать второй шаг в вашем конвейере для проверки вывода кипариса. Примерно так:

# package.json

...
"scripts": {
  "test": "<your test command>",
  "testcypress": "cypress run ..."
...

# bitbucket-pipelines.yml

image: cypress/base:10
options: max-time: 20
pipelines: 
  default: 
    - step:
        name: Run tests
        script:
            - npm install
            - npm run test
            - set +e npm run testcypress
        artifacts: 
            - cypress/screenshots/*.png
    -step:
        name: Evaluate Cypress
        script:
            - chmod +x check_cypress_output.sh
            - ./check_cypress_output.sh

# check_cypress_output.sh

# Check if the directory exists
if [ -d "./usertest" ]; then

    # If it does, check if it's empty
    if [ -z "$(ls -A ./usertest)" ]; then

        # Return the "all good" signal to BitBucket if the directory is empty
        exit 0
    else

        # Return a fault code to BitBucket if there are any images in the directory
        exit 1
    fi

# Return the "all good" signal to BitBucket
else
    exit 0
fi

Этот скрипт проверит, создал ли Cypress какие-либо артефакты, и провалит конвейер, если это так. Я не уверен, что это именно то, что вам нужно, но, вероятно, это шаг в направлении.

...