2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Circle CIを導入し、EC2デプロイ自動化

Last updated at Posted at 2022-01-14

CircleCIを導入の備忘録

すでにEC2にデプロイ済みのLaravelプロジェクトについて、コードの修正をするたびにローカルからEC2にSSH接続し、Git pullするのが面倒だったので、CICDの勉強も兼ねてCircleCiを導入しました。
使用したconfig.ymlの内容は他のブログをそのまま引用しましたが、SSH接続設定をするのに手こずり、一日費やしてしまったので備忘録として設定方法を記載します。
config.yml内の内容自体は参考とさせていただいたブログ上に説明があるのでそちらをご参照ください。

詰まった内容

登場人物がCircle CI、EC2、Githubの3つで、どこにどの秘密キーor公開キーを設定するのかがプログラミング初学者、SSH接続を全く知らない学習者には分かりづらすぎた。

前提

・EC2の環境構築は完了している ・CircleCIのユーザー登録は完了している

参考にした情報

※build / deploy 用のconfig.ymlの内容自体は下記サイトのコードをそのまま引用しております。 https://suwaru.tokyo/%E3%80%90%E4%BD%BF%E3%81%84%E6%96%B9%E3%80%91circleci%E3%81%A8%E3%81%AF%EF%BC%9Fec2%E3%81%ABssh%E3%81%97%E3%81%A6%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E8%87%AA%E5%8B%95%E5%8C%96/ https://noumenon-th.net/programming/2020/05/02/circleci-laravel-ec2-deploy/

主な設定の流れ

1.EC2上でキーペアを作成 2.GithubにてEC2で作成した公開キーを登録 3.Circle CI上で環境変数設定と秘密キーを登録 ※すでにEC2にプロジェクトをデプロイしている場合は1、2は不要の場合あるかもしれません。

使用するconfig.yml

```yml:config.yml version: 2 jobs: build: docker: - image: alpine steps: - checkout - run: name: Echo Test command: echo "CircleCI Test" deploy: machine: image: circleci/classic:edge steps: - checkout - add_ssh_keys: fingerprints: # CircleCI上でSSHキー登録を行った際に作成されるfingerprintsを記入!! - ××:××:××:××:××:××:××:××:××:××:××:××:××:××:××:×× #この箇所の[EC2上のプロジェクトパス]を自身のパスに書き換え!! - run: ssh ${USER_NAME}@${HOST_NAME} 'cd [EC2上のプロジェクトパス] && git pull'

workflows:
version: 2
build_and_deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master



<br>
<h2>1. EC2上でキーペアを作成</h2>
ローカルからEC2にアクセスし、以下コードでキーペアが存在するか確認

```:terminal
[ec2-user@ip ~] $ ls -al ~/.ssh

id_rsaとid_rsa.pubが存在しない場合、以下実行しキーペアを作成

terminal
[ec2-user@ip ~] $ ssh-keygen -t rsa -b 4096 -m pem

生成されたid_rsa.pubの内容を、リダイレクトによってauthorized_keysに追記

terminal
[ec2-user@ip ~] $ cat id_rsa.pub >> authorized_keys

次に生成したSSH公開キーをGithubに登録します。

2. GithubにてEC2で作成した公開キーを登録

EC2上で以下コマンド実行し、出てくる公開キーの内容をコピーする
※最初のssh-rsa~から最後のec2-user@ip~までをコピー

terminal
[ec2-user@ip ~] $ cat id_rsa.pub

右上の自身のアカウントアイコンから「Settings」を選択
「SSH And GPG Keys」を選択
「New SSH Key」ボタンを選択

Titleには任意のタイトルを設定、Keyにコピーした内容を貼り付け
スクリーンショット 2022-01-15 2.35.56.png

3.Circle CI上で環境変数設定と秘密キーを登録

Github内のプロジェクト一覧が表示されるのでセットアップしたいプロジェクトを「Set Up Project」で選択します。 ※画像ではすでにセットアップ済みなのでunfollow projectになってます ![スクリーンショット 2022-01-15 3.16.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481858/13f3007b-93b1-62f6-46b1-9d9fbcf17618.png)

※記事によってはGithubにCircleCI用のデプロイキーを設定しなければならないと書いてあるものもありますが、この段階で以下画像のようにデプロキーが自動で作成されます。
スクリーンショット 2022-01-15 3.26.30.png

次に、config.yml内で使用される環境変数の設定をおこないます。
以下画像内の「Project Settings」を選択し、「Environment Variables」を選択後
「HOST_NAME」と「USER_NAME」を設定します。
スクリーンショット 2022-01-15 3.32.57.png
スクリーンショット 2022-01-15 3.35.04 1.png

※ここでのHOST_NAMEはEC2インスタンスのIPアドレス、USER_NAMEはEC2インスタンスのユーザー名(ec2-userなど)
EC2接続時の[ec2-user@ip-×××-××-××-××]の@以前をユーザー名、×××-××-××-××をホスト名に設定すると動作しました


最後に「SSH Keys」を選択し、EC2インスタンスの秘密キーを登録します。

ここで登録する秘密キーがどの秘密キーなのかがわからず躓きました。。。
1番初めのステップで秘密キー、公開キーがEC2内の/.ssh内に作成されていたので、そこにある秘密キーを登録すると正常に動作しました。
EC2インスタンスにCircleCIサーバーからSSH接続することになるので、公開キーはEC2インスタンス、秘密キーのfingerprintはCircleCIということなのでしょう、、、

以下コマンドで出てくるキーを以下画像内に貼り付け

terminal
[ec2-user@ip ~] $ cat id_rsa

スクリーンショット 2022-01-15 3.56.57.png

Hostnameには環境変数設定で使用したEC2インスタンスIPアドレスを入力。
PrivateKeyについては「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY-----」までをしっかり貼り付け無いとエラーになります。

最後に発行されたfingerprintをconfig.yml内に記載してください。

スクリーンショット 2022-01-15 4.06.23.png

ここまで設定すると、Gitのマスターブランチにローカルからプッシュした段階でconfig.yml内で定義したbuild, deployが実行され、EC2へのSSH接続とGit pullが自動で実行されるはずです。
今後はテスト自動化も行いたいので、勉強していこうと思います。


2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?