根据条件提前终止构建规范,特别是在 git 标记上

Terminate a buildspec early based on Condition, specifically on a git tag

我只想 运行 我的构建管道只有当我的 repo 被标记为某些特定的发布标签时。我可以从 CODEBUILD_WEBHOOK_TRIGGER 环境变量中获取标签值,并且我可以在我的 BUILD 阶段使用一些 bash 功夫有条件地执行代码:

build:
  commands:
    - echo ${CODEBUILD_WEBHOOK_TRIGGER##*/}
    - |
     if expr "${CODEBUILD_WEBHOOK_TRIGGER}" : '^tag/30' >/dev/null; then 
        git add *
        git commit -am "System commit"
        git push
        git tag ${CODEBUILD_WEBHOOK_TRIGGER##*/}
        git push origin ${CODEBUILD_WEBHOOK_TRIGGER##*/}
        echo Pushed the repo
     fi

工作正常,我只在标签以某种方式显示时才推送。

抛开上面的脆弱性不谈,如果我的 CODEBUILD_WEBHOOK_TRIGGER 变量没有特定前缀,我真正想做的是在 INSTALL 阶段终止整个构建过程。我想跳过所有后续步骤并在没有错误的情况下退出管道。

有办法吗?尽量减少我使用的资源会很好。

回答我自己的问题,原来你可以通过在源设置中指定一个分支过滤器来做到这一点。正则表达式似乎匹配从 webhook 返回的任何内容:

^tag/30

这适用于我的标签模式。

问题成立。我仍然可以想象您出于其他原因想要缩短构建管道执行的用例。

CodeBuild 现在原生支持标签过滤。文档@ https://docs.aws.amazon.com/codebuild/latest/userguide/sample-github-pull-request.html#sample-github-pull-request-filter-webhook-events.

我使用 aws-cli 命令停止构建,使用提供的 CodeBuild 环境变量 ${CODEBUILD_BUILD_ID}:

- aws codebuild stop-build --id ${CODEBUILD_BUILD_ID}

例如:

- |
    if expr "${CODEBUILD_WEBHOOK_TRIGGER}" : '^tag/30' >/dev/null; then 
        . . .
    else
        aws codebuild stop-build --id ${CODEBUILD_BUILD_ID}
    fi