Я не думаю, что это где-то задокументировано, но 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 какие-либо артефакты, и провалит конвейер, если это так. Я не уверен, что это именно то, что вам нужно, но, вероятно, это шаг в направлении.