根据Condition(特别是git标签)尽早终止buildspec

时间:2018-12-16 19:05:55

标签: continuous-integration continuous-deployment aws-codebuild

仅当我的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阶段终止整个构建过程。我想跳过所有后续步骤,并退出管道而不会出现错误。

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

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

使用提供的CodeBuild环境变量$ {CODEBUILD_BUILD_ID}使用aws-cli命令停止构建对我来说很有效:

- 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

答案 2 :(得分:0)

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

^tag/30

这适用于我的标记模式。

问题一直存在。我仍然可以想象出一些用例,由于某些其他原因您希望使构建管道的执行短路。