Bitbucket /我看不到管道中的工件

时间:2018-11-19 12:01:03

标签: continuous-integration bitbucket-pipelines artifact

我在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

enter image description here

enter image description here

也许我输入了错误的路径,但是我不确定。

有人知道我在做什么错吗?

3 个答案:

答案 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