- Published on
CircleCIでEC2にテスト後デプロイ[Django]
- Authors
- Name
- Kikusan
ビルド
- CircleCIにGitHubアカウントでログイン
- リポジトリを選ぶ。
- config.ymlを記入する(保存した瞬間にGitHubに公開鍵が追加される)
- いろいろエラーが出るので解決する
- githubにcircleci-project-setupというブランチでconfig.ymlを追加してエラーになっている
- ローカルにこのブランチを持ってきて編集、解決。
error computing cache key: template: cacheKey:1:7: executing "cacheKey" at <checksum "requirements.txt">
⇒プロジェクト直下でpip freeze > requirements.txt
私の場合は以下。
Django==2.2.7
django-filter==2.4.0
django-widget-tweaks==1.4.8
djangorestframework==3.11.0
Pillow==7.1.2
Markdown==3.3.1
デフォルトの設定ではrequirements.txtがコンテナで読めないので、読めるようにconfig.ymlを変更。
version: 2.1
jobs:
build-and-test:
# working_directory: ~/
docker:
- image: circleci/python:3.7.5
steps:
- checkout
- restore_cache:
keys:
- pip -- {{ checksum "requirements.txt"}}
- run:
name: Install dependencies
command: pip install --user -r requirements.txt
- save_cache:
key: pip -- {{ checksum "requirements.txt"}}
paths: /home/circleci/.local/bin/
- run:
command: python manage.py test
name: Test
workflows:
main:
jobs:
- build-and-test
pythonの仮想環境を使っていないが、コンテナなのでいいか、、、
これでcommit⇒pushするとビルドが走り、無事Successと表示された。
デプロイ(EC2)
- circleCIにEC2を作った時の秘密鍵を登録する。
- Project Settings > SSH Keys > Additional SSH Keys > Add SSH Key
- Hostname : EC2のIPアドレス
- Private Key : 秘密鍵の中身全選択
- Project Settings > SSH Keys > Additional SSH Keys > Add SSH Key
pem形式の鍵ならなんでもいい。
自分の鍵を使うならEC2の ~/.ssh/authorized_keys ファイルに公開鍵として登録する。
- CircleCIの環境変数を設定する
- Project Settings > Environment Variables
- SSH_PORT : SSHのポート
- HOST_NAME : EC2のIPアドレス
- USER_NAME : EC2のユーザ名
- Project Settings > Environment Variables
大体デフォルトユーザ名はec2-userだが、UbuntuAMIはubuntu
- config.ymlの編集
version: 2.1
jobs:
build-and-test:
# working_directory: ~/
docker:
- image: circleci/python:3.7.5
steps:
- checkout
- restore_cache:
keys:
- pip -- {{ checksum "requirements.txt"}}
- run:
name: Install dependencies
command: pip install --user -r requirements.txt
- save_cache:
key: pip -- {{ checksum "requirements.txt"}}
paths: /home/circleci/.local/bin/
- run:
command: python manage.py test
name: Test
deploy:
machine:
image: circleci/classic:edge # 必要最小限コンテナ
steps:
- checkout
- add_ssh_keys # 秘密鍵を読み込む
- run: ssh -p ${SSH_PORT} ${USER_NAME}@${HOST_NAME} 'cd my-django && git pull origin main && sudo systemctl restart gunicorn.socket'
workflows:
main:
jobs:
- build-and-test
- deploy:
requires:
- build-and-test # テストが通ったらデプロイ
filters:
branches:
only: main # mainブランチのみデプロイ
この設定でmainブランチに変更があった場合のみ、デプロイができた。