VSCodeとGitLabを連携する

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

前回、前々回と私はKubernetesにArgoCDをデプロイしてみたりGitOps,CI/CD環境を構築したりしました。
今回はVSCodeとGitLabを連携させて、よりそれっぽい開発環境を作っていこうと思います。

https://qiita.com/ohtsuka-shota/items/a6b7a68150426011c7c1

https://qiita.com/ohtsuka-shota/items/8ba212cf5007ffebafb4

# 用語
## VSCode
Microsoft社が提供しているコードエディタになります。
PCにデフォルトで入っているテキストエディタを凄く拡張させたものとでも思って頂ければいいのではないでしょうか？
サーバにSSHして使用することも可能なので、画面を良い感じに分割して上部ではファイルを編集して下部でサーバを操作して、みたいな使い方はあるあるな気がします。

https://azure.microsoft.com/ja-jp/products/visual-studio-code

# 環境イメージ
今回構築するイメージは以下です。
自分のPCにgitリポジトリをclone（≒複製）します。VSCodeでNodePortのyamlを作成し、cloneからGitLabにcommit。ArgoCDがGitLabにcommitされたyamlをpullしてそれをベースにKubernetesクラスタにAuto deploy。deployされたことを確認したら、Webブラウザでdeployされたものにアクセスします。
![k8s_3-ページ5.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e01ccdea-67e2-e189-58ca-0180ea7fb3e9.png)


# 構築
## ローカルにgit cloneする
前提としてVSCodeをインストールしてください。
GitLabのProjectを見てみるとVisual Studio Code（HTTPS）というものがあるので、これを押下する。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/04258177-7383-49b3-bc8f-9b1e55177f27)
以下の様な文言が出力されるのでVisual Studio Codeを開くを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/11d2f330-a5e0-4f77-9f39-e61c9c7d67b3)
VSCodeが立ち上がるのでOpenを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/89e793dd-4299-4fb1-b136-bdba6340f4ef)
私のWindows11環境にはGitがインストールされていなかったため、以下の様な警告が出力されました。Download Gitを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/ce71fd87-c0dd-45a1-b9b3-68cd489f874e)
gitのWebサイトに自動遷移する。赤枠内を押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/f06723a9-8292-4bde-bc7d-e8d2c87f8017)
赤枠内のClick here to downloadを押下する。.exeファイルがインストールされます。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/4680d4fc-b1c4-4a9f-9f92-5b7f69769039)
インストールされた.exeを実行してGitをWindowsにインストールします。
設定を変更する必要は特段ありませんでした。ひたすら連打します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/7b496430-637e-4dba-b3d8-1b14375f7b04)
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/e20fcfdd-852f-461c-9999-49d87a94bb37)
Gitのインストールが終わりましたら、VSCodeを再起動します。
Gitのアイコンみたいなものを押すと下記スクショのような項目が選べるようになっていると思います。Clone Repositoryを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/e9f51ce5-46b7-4130-b667-78e06afc7c3b)
検索窓が表示されます。ここにGitLabのプロジェクトURLを入力します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/47569161-4c0f-4280-849e-08bdec2945c4)
URLはGitLabの以下部分となります。VSCode用ではなく普通のHTTPSのものをコピーして検索窓にペースト、実行します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/e6918817-79a8-4c60-b1a1-dc2cd05ab7d3)
Gitのデータを保管するディレクトリを決めます。これは任意の場所で構いません。決めましたらSelect as Repository Destinationを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/a645ed7c-0345-4e6c-a327-8ccfcefd471e)
するとVSCode右下部分に以下の様なポップアウトとGitLabが立ち上がってくると思います。
Sign in with your browserを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/dd1aaa31-c1dc-4a01-9cb7-fe5d44240622)
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/7005f2e6-8058-45b9-95bf-bd5f7843b0d8)
GitLabの以下の様な画面に自動で遷移すると思います。赤ボタンのAuthorizeを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/9a88f48e-117c-4aa0-be2c-e6497af59131)
VSCodeに戻ると以下の様なポップアウトがあるはずですのでOpenを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/fe25a941-8fb7-4184-a5ea-bf245813e86a)
Yesの方を押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/13dac141-c7f8-4343-a5ec-47b39e1c1c70)
するとGitLabのcloneが表示されます。これでローカルで編集して終わったらcommitして～みたいなことが出来ます。それっぽいですね。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/a00c1fbb-a8b1-4d08-a673-5941c2ad35b0)

## cloneから本番環境にcommitする
cloneしただけではダメです。commitしてArgoCDがk8s環境に自動デプロイするところまで確認していきます。
前回ArgoCDでデプロイしたnginxのDeamonSetに対してNodePortをデプロイしてみましょう。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/e10cc801-f340-49e4-b2c0-6bb9860a433e)

用意したyamlファイルは以下となります。NodePortは30001を指定しました。
```argo-test-ds-nodeport.yaml
apiVersion: v1 
kind: Service 
metadata: 
  name: argo-test-ds-nodeport 
  namespace: argo-app-ns 
spec: 
  ports: 
  - name: for-nginx 
    port: 80 
    protocol: TCP 
    targetPort: 80 
    nodePort: 30001 
  selector: 
    name: nginx 
  type: NodePort
```
上記yamlを本番GitLab環境にcommitしていきたいと思います。
Commitの右にある【▾】にカーソルを持って行ってCommit & Pushを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/c5e7184d-d2a1-49bf-90b8-cce08a0807a2)
「ステージに何も無いぞ。ステージにあげてそのままcommitするんか？」と聞かれるのでYesを押下
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/3679588f-3401-41a9-a03e-3dd5ebb9bb47)
エラーが返ってきました。user.nameとuser.email情報が無いからアップロード出来んと怒られます。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/01196907-05b3-46c8-aec7-b8b3cb4dd78c)
設定を入れこみます。
VSCodeの画面上部にTerminalという表示があると思うので押下します。するとVSCode下部にPowershellが立ち上がります。【▾】にカーソルを持っていくとGitBashなるものがあるのでこれを押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/beae2b99-12da-4ff6-bbc6-16d4e6f99eb3)
すると以下の様な感じのBashが出力されるので、git config -lで現状のconfigを確認してみます。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/3d8bfcda-8f0c-4d5b-b3ec-55eb80d41477)
以下がデータになりますが、確かにuser.nameとuser.emailがありません。
```
ohtsu@DESKTOP-0KRVRTH MINGW64 ~/OneDrive/Documents/argocd-my-config/argocd-my-config (main) 
$ git config -l 
diff.astextplain.textconv=astextplain 
filter.lfs.clean=git-lfs clean -- %f 
filter.lfs.smudge=git-lfs smudge -- %f 
filter.lfs.process=git-lfs filter-process 
filter.lfs.required=true 
http.sslbackend=openssl 
http.sslcainfo=C:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt 
core.autocrlf=true 
core.fscache=true 
core.symlinks=false 
pull.rebase=false 
credential.helper=manager 
credential.https://dev.azure.com.usehttppath=true 
init.defaultbranch=master 
core.repositoryformatversion=0 
core.filemode=false 
core.bare=false 
core.logallrefupdates=true 
core.symlinks=false 
core.ignorecase=true 
remote.origin.url=https://gitlab.com/SHOLAND/argocd-my-config.git 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.main.remote=origin
```
git config --global user.name/emailコマンドでconfigを更新します。赤い四角の中はGitLabにログインする為のメールアドレスで問題ありませんでした。コマンドを実行したら再度git config -lで更新されていることを確認しましょう。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/818c340d-c4c2-4566-850f-ce9d69826e28)

```
ohtsu@DESKTOP-0KRVRTH MINGW64 ~/OneDrive/Documents/argocd-my-config/argocd-my-config (main) 
$ git config --global user.name '●●●●' 
ohtsu@DESKTOP-0KRVRTH MINGW64 ~/OneDrive/Documents/argocd-my-config/argocd-my-config (main) 
$ git config --global user.email '●●●●' 
```
再度commitしていきます。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/adad2368-c703-4498-8119-9e32f20f9fb5)
エラーが吐かれなくなると、commit時のコメントを求められます。赤枠内がそれになります。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/51020147-4d37-4998-8cea-57ff13dc3a74)
適当にコメントを入れたら、画面右上の【✓】を押下します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/6b8be505-79a9-47f7-986e-d2e7151298d5)
これはどちらでも良いと思いますがSaveを押下。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/634cfab5-c478-4649-8b8e-25fe478de0db)
✓Commitとなっていることを確認します。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/f54fe5b1-d778-4edc-a1b3-4e55a4ebffb2)
GitLabのWebUIを確認します。yamlファイルが1つ増えているのが分かります。commitは上手くいったようです。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/1a3d3681-96db-4fbb-91e8-1f530e91d811)
ArgoCDを見てみます。NodePortが自動でデプロイされています。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/a1bcb129-85cf-410a-b74b-c1f9289858b3)
以下のUIを見るとNodePort-DeamonSetの関連性が良くわかります。
こういうのをみるとゾクゾクします。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/86708d39-5041-4444-bc87-99f03c654d5a)
https://(ホストのIPアドレス):30001でアクセスした結果nginxにアクセス出来ました。問題なさそうですね。
![Image](https://github.com/ohtsuka-shota/ascii0-python-encrypt-decrypt/assets/127835743/bfa80098-b5a3-4a8a-998e-a559904d85a0)