Open7

DevOps

jnstjnst

gitブランチのコミットハッシュを取得

$ git show-ref master
10540cf9c93bcbd909fb5f1431fc8809e5d51c9a refs/heads/master
10540cf9c93bcbd909fb5f1431fc8809e5d51c9a refs/remotes/origin/master

上記だとローカルとリモートの両方が取れてしまうので origin/* を追加して -s または --hash オプションを付けることでコミットハッシュのみを取得できる。

$ git show-ref origin/master -s
10540cf9c93bcbd909fb5f1431fc8809e5d51c9a
jnstjnst

git のコミットハッシュを正規表現で判定

s1=10540cf9c93bcbd909fb5f1431fc8809e5d51c9a
s2=hello1

$ if [[ $s1 =~ ^[0-9a-f]{40}$ ]]; then echo TRUE; else echo FALSE; fi;
TRUE

$ if [[ $s2 =~ ^[0-9a-f]{40}$ ]]; then echo TRUE; else echo FALSE; fi;
FALSE
jnstjnst

gitで存在するブランチか判定

指定ブランチがリモートにしかない場合を考慮し、rev-parse ではなく show-ref でコミットハッシュを取得する。

$ git show-ref origin/my-branch -s
7b67ca4994c5b45cd57d5f980f9790cd9fa9b33f

コミットハッシュが取得できれていれば $?0 を返すし、なければ 1 を返す。

$ echo $?
0
jnstjnst

gitで存在するコミットハッシュか判定

$ git rev-parse --verify 7b67ca4994c5b45cd57d5f980f9790cd9fa9b33f
$ echo $?

実行してみるとこれで終了コード 0 なら存在するコミットハッシュであることを確認できてるように思いがちだが、コミットハッシュの末尾の文字数を減らしても終了コード 0 となってしまう

$ git log --format=%H | grep 7b67ca4994c5b45cd57d5f980f9790cd9fa9b33f
$ echo $?

git log からなら完全一致で判定できる

jnstjnst

GitHubのfine-grained personal access tokenでprivateリポジトリをcloneするためのPermission

Repository permissions の Contents の Read only 権限を付与すれば clone できる

jnstjnst

Kubernetesでvolumeにマウントしたsecretを標準出力しないように利用する

Kubernetes のコンテナでシェルだけ実行するようなケースで秘匿情報をログ出力させたくない場合に役に立つ方法

見えてしまうやり方

container:
  name: sample
  image: ubuntu:latest
  env:
    - name: TOKEN
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: token

環境変数に Secret のデータを使うと秘匿情報が展開され実行内容としてログ出力されてしまう

curl --header "Authorization: Bearer ${TOKEN}" "https://example.jp/api"
echo "machine github.com login ${TOKEN}" > ~/.netrc;

volume にマウントしxargsで受け取ればログ出力されない

環境変数として定義せず volume にマウントする

container:
  name: sample
  image: ubuntu:latest
  volumeMounts:
    - name: my-secret
      mountPath: /my-secret
volumes:
  - name: my-secret
      secret:
        secretName: my-secret
        items:
          - key: token
            path: token.txt
xargs echo "Authorization: Bearer" < /my-secret/token.txt | curl --header @- "https://example.jp/api"

ファイルを標準入力として受け取り Authorization ヘッダーとして認証情報を作成し、curl のオプションに @- 指定することで標準入力として受け取る

xargs echo "machine github.com login" < /my-secret/token.txt > ~/.netrc

ファイルを標準入力として受け取り .netrc に書き込む用の文字列を作成してホームディレクトリの .netrc ファイルに出力する

jnstjnst

現在のコミットハッシュを取得

$ git rev-parse HEAD
7b67ca4994c5b45cd57d5f980f9790cd9fa9b33f