我在CI环境中运行e2e测试,但是看不到管道中的工件。
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
也许我输入了错误的路径,但是我不确定。
有人知道我在做什么错吗?
答案 0 :(得分:0)
除了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管道被配置为在任何非零退出代码处停止。这意味着当赛普拉斯未通过测试时,管道执行将停止。由于工件是在管道的最后一步之后存储的,因此您将没有任何工件。
要变通解决此问题,您必须确保在保存图像之前管道不会停止。一种实现方法是在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是否创建了任何工件,并且如果这样做,将使管道失败。我不确定这是否正是您所需要的,但这可能是朝这个方向迈出的一步。
答案 1 :(得分:0)
由于/**
和videos
内有额外的文件夹,因此在Cypress 3.1.0中,递归搜索(screenshots
)为我工作了
# [...]
pipelines:
default:
- step:
name: Run tests
# [...]
artifacts:
- cypress/videos/** # Double star provides recursive search.
- cypress/screenshots/**
答案 2 :(得分:0)
这是我的工作解决方案 'cypress:pipeline' 是我的 bitbucket 配置文件中用于运行 cypress 的自定义管道。 请在工件部分尝试 cypress/screenshots/**/*.png
"cypress:pipeline": "cypress run --env user=${E2E_USER_EMAIL},pass=${E2E_USER_PASSWORD} --browser chrome --spec cypress/integration/src//*.spec.ts ” 管道: 风俗: 健康检查: - 步: 名称:集成和E2E测试 脚本: - npm 安装 - npm 运行 cypress:pipeline 文物: # 将任何生成的图像存储为工件 - cypress/screenshots//*.png