0.はじめに
最近個人や現場でも、Linuxを用いたGitの開発と、k8sによるクラスタ管理を行うことが増えてきました。
現場で実際にあったミスですが、対象のコンテキストを間違えてデプロイしてしまってアプリが止まるといったこともあり、プロンプトに情報を表示するに越したことはないと思い、個人の備忘として記載しておきます。
Gitのプロンプト表示、k8sのプロンプト表示をそれぞれ解説し、その複合版も記載しますが先に結論は記載しておきます。
TL;DR
ユーザの~/.bashrc
に以下を記載
# Git ブランチ名を取得する関数
function parse_git_branch() {
branch=$(git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ -z "$branch" ]; then
echo "N/A" # ブランチが無ければ "N/A" を表示
else
echo "$branch" # ブランチがあればそのまま表示
fi
}
# リポジトリ名取得関数
function parse_git_repos() {
# Gitリポジトリかどうかを確認
if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
# Gitリポジトリの場合、リモートURLを取得しリポジトリ名を表示
repos=$(basename -s .git "$(git remote get-url origin)")
echo "$repos" # リモートリポジトリ名を表示
else
echo "N/A" # Gitリポジトリでない場合
fi
}
# 色設定
RED="\[\033[01;31m\]"
YELLOW="\[\033[01;33m\]"
GREEN="\[\033[01;32m\]"
BLUE="\[\033[01;34m\]"
WHITE="\[\033[01;37m\]"
CYAN="\[\033[01;36m\]"
BOLD="\[\033[1m\]"
NO_COLOR="\[\033[00m\]"
# kube-ps1 の読み込み
source "/work/kube-ps/kube-ps1.sh"
# kube-ps1 のオプション設定
export KUBE_PS1_SYMBOL_ENABLE=false
# PS1 の統合
PS1="$GREEN\u@\h$WHITE:$BLUE\w $YELLOW($NO_COLOR$RED\$(parse_git_branch)$YELLOW) $NO_COLOR$BOLD\$(kube_ps1)$WHITE\$ $NO_COLOR"
#お試し版
#PS1="$CYAN\u$GREEN@\h$WHITE:$BLUE\w $YELLOW($BLUE🔧$YELLOW|$RED\$(parse_git_branch)$YELLOW) $BOLD\$(kube_ps1)$WHITE\$$NO_COLOR "
#PS1="$CYAN\u$GREEN@\h$WHITE:$BLUE\w $YELLOW($RED\$(parse_git_repos)$YELLOW:$CYAN\$(parse_git_branch)$YELLOW) $BOLD\$(kube_ps1)$WHITE\$$NO_COLOR "
Gitのbranchがある時
Gitのbranchがない時
k8sのネームスペース切替
1.Gitのプロンプト表示
主にこちらやこちらのサイトを大いに参考(ほぼ丸パクリ)させて頂きました。
やっていること非常にシンプルで、git branch
の結果をPS1
変数に返しているだけです。
1-1.Gitのbranch名表示
以下の設定内容を~/.bashrc
に記載し、source ~/.bashrc_
で読み込みます。
色や表示内容はかなり好みによると思いますので、色々変えてみてください。
function parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
RED="\[\033[01;31m\]"
YELLOW="\[\033[01;33m\]"
GREEN="\[\033[01;32m\]"
BLUE="\[\033[01;34m\]"
NO_COLOR="\[\033[00m\]"
PS1="$GREEN\u@\h$NO_COLOR:$BLUE\w $RED\$(parse_git_branch)$NO_COLOR\$ "
Gitのbranchがあるディレクトリに移動すると、以下のように表示されます。
当然branchの切替を行うと、以下のように変更も反映されます。
2.k8sのコンテキスト・ネームスペースのプロンプト表示
こちらのGitにインストール手順などが記載されています。
まずは単純に資材をcloneします。今回は/work/kube-ps
にcloneしています。
root@k8s-master-node01:~ $ git clone https://github.com/jonmosco/kube-ps1.git /work/kube-ps
Cloning into '/work/kube-ps'...
remote: Enumerating objects: 760, done.
remote: Counting objects: 100% (195/195), done.
remote: Compressing objects: 100% (108/108), done.
remote: Total 760 (delta 107), reused 165 (delta 83), pack-reused 565 (from 1)
Receiving objects: 100% (760/760), 7.72 MiB | 13.94 MiB/s, done.
Resolving deltas: 100% (401/401), done.
次に、手順に記載の通り~/.bashrc
に以下のように追記します。
source /work/kube-ps/kube-ps1.sh
PS1='[\u@\h \W $(kube_ps1)]\$ '
source ~/.bashrc_
で読み込むと以下のように現在のコンテキストやネームスペースが表示されます。
3.Gitもk8sもどっちも表示する
解説も兼ねていたので、Gitとk8sそれぞれの表示方法を記載しました。
ただ、タイトルにもある通りどっちも見たいので、PS1
変数に対していい感じにマージした物が冒頭の物になります。
上記で紹介した個別の物とマージ版で少し内容が変わっています。
- branchが無い時は
(N/A)
と返却するように変更 -
KUBE_PS1_SYMBOL_ENABLE
変数をfalse
に設定(⎈
マークが非表示になる)
4.最後に
プロンプトに何を表示させるかは個人の好み、現場の方針などでだいぶ変わると思いますが、これで瞬時に判別できるようになるのでオペミスが減る…のでは…。
参考サイト
・Git ブランチ名を Bash プロンプトに表示する方法とカラーコーディング
https://qiita.com/c8h9no2/items/f54b1f2c43892d4b6310
・プロンプトをカスタマイズしてgitブランチを表示する
https://qiita.com/caad1229/items/6d71d84933c8a87af0c4
・kube-ps1
https://github.com/jonmosco/kube-ps1