Досрочное завершение спецификации сборки на основе условия, в частности тега git.

Я хотел бы запускать свой конвейер сборки только тогда, когда мое репо помечено определенными тегами выпуска. Я могу получить значение тега из переменной среды CODEBUILD_WEBHOOK_TRIGGER, и я могу условно выполнить код на моей фазе BUILD с некоторым bash kung fu:

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

Работает нормально, я нажимаю только тогда, когда тег выглядит определенным образом.

Если оставить в стороне хрупкость вышесказанного, то, что я действительно хочу сделать, это завершить весь процесс сборки на этапе INSTALL, если моя переменная CODEBUILD_WEBHOOK_TRIGGER не имеет определенного префикса. Я хотел бы пропустить все последующие шаги и выйти из конвейера без ошибок.

Есть ли способ сделать это? Было бы неплохо свести к минимуму ресурсы, которые я использую.


person Robert Moskal    schedule 16.12.2018    source источник


Ответы (3)


CodeBuild теперь изначально поддерживает фильтрацию тегов. Документация @ https://docs.aws.amazon.com/codebuild/latest/userguide/sample-github-pull-request.html#sample-github-pull-request-filter-webhook-events.

person Subin Mathew    schedule 14.02.2019

Мне помогло использовать команду 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
person rgunter    schedule 21.08.2019

Отвечая на мой собственный вопрос, оказывается, вы можете сделать это, указав фильтр ветвей в исходной настройке. Кажется, что регулярное выражение соответствует всему, что возвращается из веб-перехватчика:

^tag/30

Это работает для моего шаблона тегов.

Вопрос стоит. Я все еще могу представить случаи использования, когда вы хотите сократить выполнение конвейера сборки по какой-то другой причине.

person Robert Moskal    schedule 16.12.2018