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

问题描述 投票:0回答:4

我只想在我的回购协议被标记为某些特定的发布标签时运行我的构建管道。我可以从 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 阶段终止整个构建过程。我想跳过所有后续步骤并在没有错误的情况下退出管道。

有没有办法做到这一点?尽量减少我使用的资源会很好。

continuous-integration continuous-deployment aws-codebuild
4个回答
6
投票

我使用 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


1
投票

您可以简单地执行

exit 10
(或任何其他错误代码)。

像这样:

- exit 10

或:

- |
  if [ ..... ]; then
    exit 10
  fi

0
投票

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

^tag/30

这适用于我的标签模式。

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

© www.soinside.com 2019 - 2024. All rights reserved.