CircleCiとbitbucketの連携とEC2(AmazonLinux2)にSSH接続してデプロイする手順
デプロイツールに今回CircleCiを導入することになります。
もともとbitbucket⇒EC2の連携はSSHの認証で行っている状態で、デプロイ用のスクリプトdeploy.sh
を実行してデプロイを行っていた。今回はEC2上のこのスクリプトを自動で実行してデプロイとする。gitで管理しているプロジェクトのdevelopブランチへPUSHされたことをトリガーに、EC2でのデプロイを自動化して実行するという流れ。
deploy.sh
…内容は、Rubyのプロジェクトなのでデプロイに必要な「最新のソースを取得⇒asset:precompile
実行⇒nginx再起動」のような一連の流れを行うスクリプト。
CircleCIとbitbucketの連携
1. Set Up Project
CircleCIにbitbucketアカウントでログインし、プロジェクトの「Set Up Project」
2. .circleci/config.yml
ファイルの追加
プロジェクトのホーム直下に、CircleCI用の設定ファイルを設置してPUSHする。
config.ymlの中身は下記の内容で。テストは簡略化しているので、別途適宜修正。
今回はdevelopブランチにPUSHされることをトリガーにした設定をします。
version: 2
jobs:
build:
machine:
image: circleci/classic:edge
steps:
- checkout
- run:
name: Echo Test
command: echo "CircleCI Test"
# deploy
deploy:
machine:
image: circleci/classic:edge
steps:
- checkout
# 秘密鍵を呼び出す
- add_ssh_keys:
# 環境変数を使って SSH
- run: ssh ${USER_NAME}@${HOST_NAME} 'cd && ./deploy.sh'
workflows:
version: 2
build_and_deploy:
jobs:
- build
- deploy:
requires:
# 先に build ジョブを実行
- build
# develop ブランチに push された場合のみ deploy
filters:
branches:
only: develop
3. 環境変数の追加
CircleCiの「Environment Variables」から{USER_NAME}
、{HOST_NAME}
に該当の値を登録します。
CircleCIとEC2の連携
今回CircleCi⇒EC2にログインしてデプロイのため、SSHのKEYを生成し連携しておく。
1. 秘密鍵生成
EC2で秘密鍵を作成します。(circleci-key
、circleci-key.pub
)
$ ssh-keygen -m pem
場所は、ユーザーのホームディレクトリの.sshフォルダ直下に設置。
※既存の鍵を上書きしないように今回はファイル名をcircleci-key
にして新規作成する。
2. authorized_keysへ追加
$ cat ~/.ssh/circleci-key.pub >> authorized_keys
3. CircleCIへ鍵の追加
CircleCiの「SSH Keys」Additional SSH Keysで「circleci-keyの内容」と「該当ホスト名」を登録する。
動作確認
developブランチにPUSHしてみる。
CircleCiのPipelinesで何やらSUCCESSが確認できればOK
参考サイト
- https://qiita.com/kenkono/items/ef2f93eee713d154285d
- https://suwaru.tokyo/【使い方】circleciとは?ec2にsshしてデプロイ自動化/