Статьи

Bash’ing ваше развертывание Git

Чак Норрис разворачивается после каждого коммита. Умные люди развертываются после каждой успешной сборки на своем сервере непрерывной интеграции. Обученные люди, разверните код прямо из своих распределенных систем контроля версий. Я, будучи ни тем, ни другим, должен был написать свой сценарий развертывания на bash.

Мы используем git, и при этом я хотел, чтобы мы:

  • развернуть из рабочей копии, но…
  • убедитесь, что вы можете развернуть только если вы совершите все
  • убедитесь, что вы можете развернуть, только если вы все подтолкнули вверх по течению
  • помечать развернутый хеш
  • отображать журнал изменений (все коммиты между двумя последними тегами)

Вот некоторые BASH-процедуры, которые я написал по пути, если они вам нужны:

убедитесь, что вы можете развернуть только если вы совершите все

01
02
03
04
05
06
07
08
09
10
verifyEverythingIsCommited() {
    gitCommitStatus=$(git status --porcelain)
    if [ '$gitCommitStatus' != '' ]; then
        echo 'You have uncommited files.'
        echo 'Your git status:'
        echo $gitCommitStatus
        echo 'Sorry. Rules are rules. Aborting!'
        exit 1
    fi
}

убедитесь, что вы можете развернуть, только если вы все подтолкнули вверх по течению

01
02
03
04
05
06
07
08
09
10
verifyEverythingIsPushedToOrigin() {
    gitPushStatus=$(git cherry -v)
    if [ '$gitPushStatus' != '' ]; then
        echo 'You have local commits that were NOT pushed.'
        echo 'Your 'git cherry -v' status:'
        echo $gitPushStatus
        echo 'Sorry. Rules are rules. Aborting!'
        exit 1
    fi
}

помечать развернутый хеш

Обратите внимание: мой сценарий принимает первый параметр в качестве имени сервера для развертывания (это $ 1, переданный этой процедуре). Также обратите внимание, что ‘git push’ без ‘-tags’ не толкает ваши теги.

1
2
3
4
5
tagLastCommit() {
    d=$(date '+%y-%m-%d_%H-%M-%S')
    git tag '$1_$d'
    git push --tags
}

Это создает красивые теги, подобные этим:

preprod_12-01-11_15-16-24

prod_12-01-12_10-51-33

test_12-01-11_15-11-10

test_12-01-11_15-53-42

отображать журнал изменений (все коммиты между двумя последними тегами)

1
2
3
4
5
6
7
printChangelog() {
    echo 'This is changelog since last deploy. Send it to the client.'
    twoLastHashesInOneLine=$(git show-ref --tags -s | tail -n 2 | tr '\\n' '-');
    twoLastHashesInOneLineWithThreeDots=${twoLastHashesInOneLine/-/...};
    twoLastHashesInOneLineWithThreeDotsNoMinusAtTheEnd=$(echo $twoLastHashesInOneLineWithThreeDots | sed 's/-$//');
    git log --pretty=oneline --no-merges --abbrev-commit  $twoLastHashesInOneLineWithThreeDotsNoMinusAtTheEnd
}

Последняя команда дает вам хороший журнал, как это:

e755c63 deploy: исправлено отображение журнала изменений из двух первых тегов вместо двух последних

926eb02 выводит список изменений между двумя последними тегами при развертывании

34478b2 добавлены теги git для развертывания

Ссылка: Bash’ing ваш Git развертывания от нашего партнера JCG Якуба Nabrdalik в блоге Solid Craft .