首页 > 解决方案 > Cloudposse CodeFresh——拉取请求管道规范——终止而不将状态设置为“失败”

问题描述

我有一个 CodeFresh、GitHub 拉取请求管道。

有两种情况,PR 标记为 "Failed"理想情况下它会显示为 "Pending"或无状态。

场景一:

当一个新事件被触发时,它会终止之前的构建(如预期的那样)

构建被管道策略终止 - 新构建由分支上的拉取请求触发<my-branch>

这一切都很好,但是构建在 GitHub 上显示为“失败”。从理论上讲,新构建将撤消“失败”状态,但这可能需要相当长的时间,并且很难跟踪最新运行的构建是什么。我的terminationPolicy规格如下所示:

terminationPolicy:
  - type: branch
    event: onCreate

终止政策文档: https ://codefresh.io/docs/docs/integrations/codefresh-api/?#full-pipeline-specification

场景二:

我们想绕过基于应用标签的构建。例如:"skip-test",或者能够不受branchRegex.

steps:
  harakiri:
    ...
    commands:
      - codefresh terminate ${{CF_BUILD_ID}}
    when:
      condition:
        any:
          isWorkInProgress: "match('${{CF_PULL_REQUEST_LABELS}}', 'WIP', false) == true"

再次,效果很好。但是将 PR 标记为“失败”。


如果有办法将命令注入其中任何一个,我可以使用它。但是我们如何布置它需要整个步骤才能将状态更改为“待定”。(所以我不能简单地在harakiri步骤中添加一个额外的“命令”)

有什么想法吗?

标签: githubcontinuous-integrationpipelinecodefresh

解决方案


方案 1

我可以建议您使用带有钩子的 github-status-updater(而不是默认状态更新)

所以基本上它会pending在构建开始时设置状态(如果它被策略终止,它将保持这个状态)。

hooks:
  on_success:
    title: Set GitHub deployment status to "success"
    image: cloudposse/github-status-updater
    environment:
      - GITHUB_ACTION=update_state
      - GITHUB_TOKEN=${{GITHUB_TOKEN}}
      - GITHUB_OWNER=${{CF_REPO_OWNER}}
      - GITHUB_REPO=${{CF_REPO_NAME}}
      - GITHUB_REF=${{CF_REVISION}}
      - GITHUB_CONTEXT=Codefresh CI - Build
      - GITHUB_STATE=success
      - GITHUB_TARGET_URL=${{CF_BUILD_URL}}
  on_fail:
    title: Set GitHub deployment status to "failure"
    image: cloudposse/github-status-updater
    environment:
      - GITHUB_ACTION=update_state
      - GITHUB_TOKEN=${{GITHUB_TOKEN}}
      - GITHUB_OWNER=${{CF_REPO_OWNER}}
      - GITHUB_REPO=${{CF_REPO_NAME}}
      - GITHUB_REF=${{CF_REVISION}}
      - GITHUB_CONTEXT=Codefresh CI - Build
      - GITHUB_STATE=failure
      - GITHUB_TARGET_URL=${{CF_BUILD_URL}}
  on_elected:
    title: Set GitHub deployment status to "pending"
    image: cloudposse/github-status-updater
    environment:
      - GITHUB_ACTION=update_state
      - GITHUB_TOKEN=${{GITHUB_TOKEN}}
      - GITHUB_OWNER=${{CF_REPO_OWNER}}
      - GITHUB_REPO=${{CF_REPO_NAME}}
      - GITHUB_REF=${{CF_REVISION}}
      - GITHUB_CONTEXT=Codefresh CI - Build
      - GITHUB_STATE=pending
      - GITHUB_TARGET_URL=${{CF_BUILD_URL}}    

要禁用默认状态更新,请使用 CLI 修补管道规范

codefresh get pip <name> -o yaml > file.yml

spec:
  options:
    enableNotifications: false

codefresh replace -f file.yml


推荐阅读