※この記事はドラフト版です。
目的
- ソースが更新されたタイミングで本番環境を更新したい
- モダンな開発に必須といわれる噂のCI/CDを試してみたい
方法
- GitLabのCI/CDを使用する
下記の記事を参考に設定しました。
https://qiita.com/Mochieyan/items/6a71c6908bc6d86d0fc1
実施
秘密鍵と公開鍵の作成
GitLabから本番環境のサーバへ接続する際に使用する鍵を作ります
Powershellで次のコマンドを実行
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
次のファイルが作成される
- 秘密鍵「id_rsa」
- 公開鍵「id_rsa.pub」
本番環境のサーバに公開鍵を置く
次のファイルに公開鍵「id_rsa.pub」の内容をコピペして保存する
※サーバへの接続は説明省略
nano ~/.ssh/authorized_keys
GitLab(SaaS版)への登録とプロジェクトの作成
説明は省略
次の構成でサーバと同じ内容のmain.pyを配置
[fastapi]
[imari_city_opendata]
main.py
GitLabに秘密鍵を登録する
[Variables]→[expand]
[Add variable]
次のKeyとValueを設定する
- Key:SSH_PRIVATE_KEY
- Value:秘密鍵「id_rsa」の内容をコピペ
GitLabのYAMLファイルを作成する
次の内容を記載
本番環境のサーバにGitLabのfastapiフォルダをコピーする内容です
(先ほど設定した環境変数「$SSH_PRIVATE_KEY」から秘密鍵を取得してsshの接続情報として使う)
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
deploy-prod:
stage: deploy
before_script:
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_rsa
- ssh-add -l
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
- scp -i ~/.ssh/id_rsa -r fastapi ubuntu@example.sakura.ne.jp:/home/ubuntu/app
- ssh -tt ubuntu@example.sakura.ne.jp -i ~/.ssh/id_rsa -C "sudo systemctl restart fastapi_imari_opendata_gunicorn"
environment: production
[Commit Change]ボタンを押下
pipelineが走る
詳細(#番号のリンクをクリック)
さらに、[deploy]などをクリックすると詳細が表示される
※色々見えてるので折りたたんでいます。別途要検討。
main.pyの中身を変更してpushする
変更前
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
変更後
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World 20240325"}
コミットとプッシュ
git add .
git commit -m "test"
git push