はじめに
前回の続きで、今回は自動デプロイを試していこうと思います。
✅ゴール
・CircleCI/CDの理解を深める
✅環境
Windows
✅参考教材
💻Laravel × CircleCI × AWSで学ぶCI/CD
💻いまさらだけどCircleCIに入門したので分かりやすくまとめてみた
かなり細かく記載してくれている。
自動デプロイ
✅EC2上で秘密鍵と公開鍵の作成
EC2へのSSH接続
ssh ec2-user@EC2のパブリックIPアドレス -i ~/.ssh/laravel-ci-ec2-user.pem
ユーザー切替
sudo su - webapp
webappユーザーの秘密鍵と公開鍵の作成
ssh-keygen -m pem -C ""
※-m pemは、鍵をpemという形式で作成するオプション。CircleCIに登録する際.pemにする必要があるため。
✅公開鍵をGitHubに登録
リポジトリ⇒Settings⇒Deploy keys⇒Add deploy key⇒id_rsa.pub(EC2で作成)の内容を貼り付け
cat ~/.ssh/id_rsa.pub >> ssh-rsa ~~~~~ // 表示された内容をコピぺする。
EC2からGitHubへのSSH接続
ssh git@github.com >> ~~~~ // yes
HTTPS接続からSSH接続に変更
cd ~/laravel-ci git remote -v >> origin https://github.com/chobi1125/laravel-ci.git (fetch) origin https://github.com/chobi1125/laravel-ci.git (push) git remote set-url origin git@github.com:chobi1125/laravel-ci.git git remote -v >> origin git@github.com:chobi1125/laravel-ci.git (fetch) origin git@github.com:chobi1125/laravel-ci.git (push)
※個人のGitHubアカウントに紐付くユーザーではない、システムとしてのユーザーであるwebappユーザーの鍵を発行し使用することで、個人に依存しない仕組みにしている
✅デプロイ用の秘密鍵をCircleCIに登録
CircleCIへ移動⇒Project Settings⇒SSH Keys⇒Add SSH Keysで登録
cat ~/.ssh/id_rsa // 以下全てコピペ -----BEGIN RSA PRIVATE KEY----- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 略 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= -----END RSA PRIVATE KEY-----
✅デプロイ用の公開鍵で公開鍵認証可能にする(CiecleCIからSSH接続を可能にする。)
authorized_keysの作成
※webappユーザーを公開鍵で認証させるには、EC2の/home/webapp/.sshディレクトリにauthorized_keysというファイルを作成
sudo su - webapp cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys // 権限変更 ls -l ~/.ssh // 確認 >> -rw------- 1 webapp webapp 764 May 24 04:06 authorized_keys
✅CircleCIの環境変数とdeployジョブの追加
環境変数の追加
Project Settings⇒Environment Variables⇒Add Environment Variables(ValueにIPアドレス)
※リモートでmasterブランチへのマージとローカルのmasterブランチをリモートのmasterブランチの内容に反映しておく。
git branch -a //確認 >> * feature/ci_test master remotes/origin/feature/ci_test git checkout master // masterブランチへ変更
.circleci/config.ymlが古い状態であることを確認
version: 2.1 jobs: build: docker: - image: circleci/php:7.3-node-browsers steps: - run: echo "Hello World"
更新
git remote -v // 更新基のリモートリポジトリの確認
>> origin https://github.com/chobi1125/laravel-ci.git (fetch)
origin https://github.com/chobi1125/laravel-ci.git (push)
git fetch
git merge origin/master// config.ymlが更新されていればOK
git branch -a // 念のためブランチも確認
>> feature/ci_test
* master
remotes/origin/circleci-project-setup
remotes/origin/feature/ci_test
remotes/origin/master
開発ブランチを新たに作成
git checkout -b feature/ssh_deploy
config.ymlの編集
※コードは割愛。教材5-6
変更をプッシュ⇒プルリクを立ててCircleCIのページ遷移のためdetailsをクリック。
git remote rm origin git add . git commit -m"circleci/config.ymlの編集で自動デプロイ" git remote add origin https://github.com/chobi1125/laravel-ci.git git push -u origin feature/ssh_deploy
CircleCIのページ上でbuild_deployをクリック。
buildジョブのみの実行で、deployジョブは実行されていないことがわかる。

GitHub上でmasterブランチへマージすると、deployジョブが実行されているのが確認できる。

僕の場合はここでエラー発生。

訳:ssh:ホスト名を解決できませんでした******************:名前またはサービスが不明です
👉環境変数の登録でIPアドレスの登録にhttp://~~~で登録してしまったことが原因でした。~~~のみ登録で解決。

以下でEC2上のファイルが変更されていることも確認
cat laravel-ci/.circleci/config.yml
✅アプリの機能を変更してデプロイチェック
ブランチを変更して試すのでGitの更新
git branch -a //確認 git checkout master // masterブランチへ変更
※.circleci/config.ymlが古い状態であることを確認
更新
git pull origin master
開発ブランチを新たに作成
git checkout -b feature/ninja
resources/views/articles/card.blade.phpを編集
<div class="card mt-3">
<div class="card-body d-flex flex-row">
<a href="{{ route('users.show', ['name' => $article->user->name]) }}" class="text-dark">
<i class="fas fa-user-ninja fa-3x mr-1"></i> {{-- この行を変更(circleをninjaに変更) --}}
</a>
{{-- 略 --}}
Dockerを停止していたら再起動する
docker-compose up -d workspace php-fpm nginx postgres
確認

プッシュ
git remote rm origin git add . git commit -m"circleci/config.ymlの編集とテンプレート更新でユーザーアイコンを忍者アイコンにする" git remote add origin https://github.com/chobi1125/laravel-ci.git git push -u origin feature/ninja
確認

おわりに
この教材を続けると6章でAWSの自動デプロイサービスCode Deployを使った別パターンのデプロイ方法を学んでいくっぽい。
7章はAWSのCodeCommit, CodeBuild, CodePipelineというサービスも組み合わせるとのこと。
5章までの内容で結構おなか一杯なのにすごい。。。
とりあえずここまでの内容を活かして自身のWebアプリをAWSにデプロイして運用してみたい。
コメントを残す