なるべくDockerを利用して手元の端末を汚さない試み。便利かはわかりません。
使い方
docker-gcloud
コマンドはDockerコンテナでgcloud
コマンドを実行しています。
認証情報はホストの~/.config/gcloud
を参照します。
Cloud Buildにジョブ登録してみます。
# credentials.dbなどがある前提
> ls ~/.config/gcloud/
access_tokens.db config_sentinel credentials.db legacy_credentials
active_config configurations gce logs
> docker-gcloud --version
Google Cloud SDK 267.0.0
bq 2.0.49
core 2019.10.15
gsutil 4.44
> cat <<EOF > cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'bash'
args: ['-c', 'echo "hoge"']
EOF
> docker-gcloud builds submit \
--config=cloudbuild.yaml \
--no-source
Created [https://cloudbuild.googleapis.com/v1/projects/<GCPのProjectID>/builds/16cab9fd-a4b3-4937-a7a3-7838516788d3].
Logs are available at [https://console.cloud.google.com/gcr/builds/16cab9fd-a4b3-4937-a7a3-7838516788d3?project=168605712006].
---------------------------------------------------- REMOTE BUILD OUTPUT ----------------------------------------------------
starting build "16cab9fd-a4b3-4937-a7a3-7838516788d3"
FETCHSOURCE
BUILD
Already have image (with digest): gcr.io/cloud-builders/git
hoge
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
16cab9fd-a4b3-4937-a7a3-7838516788d3 2019-10-20T02:23:44+00:00 3S - - SUCCESS
> docker-gcloud builds log \
16cab9fd-a4b3-4937-a7a3-7838516788d3
---------------------------------------------------- REMOTE BUILD OUTPUT ----------------------------------------------------
starting build "16cab9fd-a4b3-4937-a7a3-7838516788d3"
FETCHSOURCE
BUILD
Already have image (with digest): gcr.io/cloud-builders/git
hoge
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------------------
カレントディレクトリのcloudbuild.yaml
をちゃんとみてくれてますね。でけたー
環境設定
コマンドを作成
Google Cloud SDKのDockerイメージは公式から提供されているのでそれを利用します。
google/cloud-sdk - Docker Hub
https://hub.docker.com/r/google/cloud-sdk/
下記を参考にしてDockerコンテナ内でgcloud
コマンドを実行できるようにします。
Dockerにホームディレクトリをマウントしちゃおう - Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608
Dockerコンテナからホスト側カレントディレクトリにアクセス - Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3
ポイントは以下のとおりです。
-
-v $HOME/.config/gcloud:$HOME/.config/gcloud -e "HOME=$HOME"
で認証情報をホストにあるものを参照 -
-v $PWD:$PWD -w $PWD
でコマンド実行時のカレントディレクトリを指定 -
--entrypoint=gcloud
と$*
で通常のgcloud
コマンド実行と同じ挙動を実現
#!/bin/sh
docker run -it --rm \
-v $HOME/.config/gcloud:$HOME/.config/gcloud \
-v $PWD:$PWD \
-e "HOME=$HOME" \
-w $PWD \
--entrypoint=gcloud \
google/cloud-sdk:alpine \
$*
作成したファイルのシンボリックリンクを/usr/local/bin
にはって実行できるようにします。/usr/local/bin
が$PATH
に含まれている前提です。
google/cloud-sdk - Docker Hub
https://hub.docker.com/r/google/cloud-sdk/
Dockerにホームディレクトリをマウントしちゃおう - Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608
Dockerコンテナからホスト側カレントディレクトリにアクセス - Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3
自作のコマンドを作成した - Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625
> chmod +x docker-gcloud
> ln -s docker-gcloud /usr/local/bin/
これで最初にあげたようにdocker-gcloud
コマンドが実行できるようになります。
gsutil
コマンドもエントリーポイントを変えてやれば実現できます。
コマンド実行のカレントディレクトリがDockerコンテナで参照できるので、たいていのコマンド実行では問題にならないかなと。
docker-gcloud
がコマンド打つのに長ったらしいのはエイリアスなんかでどうにでもなります。
まとめ
使えるかわかりませんが、とりあえずイメージしてたコマンドが出来上がりました。
参考
google/cloud-sdk - Docker Hub
https://hub.docker.com/r/google/cloud-sdk/
Dockerにホームディレクトリをマウントしちゃおう - Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608
Dockerコンテナからホスト側カレントディレクトリにアクセス - Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3
自作のコマンドを作成した - Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625