Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2885

git tagのsemantic versionを自動でインクリメントしてpushするシェルスクリプト

$
0
0
前提 現在携わっているサービスでGitLab CI/CDを利用してリリース番号がついているtagをpushすると 自動でデプロイされるように設定しています .gitlab-ci-production.yml ... ... ... only: - /^release-.*$/ リリースのたびにtagのsemantic versionをインクリメントするのがめんどくさいので 自動化できないか考えてみました # masterブランチで差分を取り込む $ git checkout master $ git pull # インクリメントするために最新のタグを取得 $ git describe --abbrev=0 --tags > release-1.1.1 # 新しいタグを追加 $ git tag release-1.1.2 # タグをリモートにプッシュ $ git push --tags # この一連の作業を自動化したい 巨人の肩に乗る 調べるとパッチバージョンのみインクリメントできるシェルスクリプトを書いてくれる人がいたので シェルスクリプト初心者ですが少し改良してみました 作成したシェルスクリプト deploy.sh #!/bin/bash #checkout master and pull git checkout master git pull #get highest tag number VERSION=`git describe --abbrev=0 --tags` #replace . with space so can split into an array VERSION_BITS=(${VERSION//./ }) #get number parts and increase VNUM1=`echo ${VERSION_BITS[0]} | sed -e 's/[^0-9]//g'` VNUM2=${VERSION_BITS[1]} VNUM3=${VERSION_BITS[2]} if [ ${VNUM3} -ge 9 ]; then if [ ${VNUM2} -ge 9 ]; then VNUM1=$((VNUM1+1)) VNUM2=0 VNUM3=0 else VNUM2=$((VNUM2+1)) VNUM3=0 fi else VNUM3=$((VNUM3+1)) fi #create new tag SEMVER="$VNUM1.$VNUM2.$VNUM3" TAG_PREFIX="release-" NEW_TAG="$TAG_PREFIX$SEMVER" read -p "Do you really updating $VERSION to $NEW_TAG (y/n)" YN_LOADSETTING if [ "${YN_LOADSETTING}" != "y" ]; then echo "bye" exit 1 fi #get current hash and see if it already has a tag GIT_COMMIT=`git rev-parse HEAD` NEEDS_TAG=`git describe --contains $GIT_COMMIT 2>/dev/null` #only tag if no tag already if [ -z "$NEEDS_TAG" ]; then git tag $NEW_TAG echo "Tagged with $NEW_TAG" git push --tags else echo "Already a tag on this commit" fi 改良してみた点 readコマンドで確認 万が一うまくインクリメントできていなかったりリリースの必要がなかった場合など一回確認しておきたいためreadを追加しました パッチバージョンのインクリメント以外も対応 パッチバージョンが9かどうかで上位のバージョンもインクリメントするか分岐させました 終わりに シェルスクリプトを初めてちゃんと書いてみましたがとても勉強になりました そもそもリリースの内容によってパッチを上げるかマイナーを上げるかなど考慮する必要がありますが そこができていないのでいずれ引数を持たせてあげるバージョンを選べるようにしてみたいです こっちの方がイケてるとかあればぜひご教示ください ご読了ありがとうございました

Viewing all articles
Browse latest Browse all 2885

Trending Articles