AWS

CircleCiとbitbucketの連携とEC2(AmazonLinux2)にSSH接続してデプロイする手順

circleCI-bitbucket
o_wani
この記事は作成から4年以上経過しているため、内容が古くなっている可能性があります。

デプロイツールに今回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-keycircleci-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

参考サイト

STAFF
o_wani
o_wani
スタッフ
大学卒業後、15年間WEB業界で働く。現在はマネジメントに従事していますが、ChatGPTの登場に触発され、このブログを再開。AIをパートナーに、自分で手を動かして実装する楽しさと喜びを再発見中。時代が変わりつつある中でも、陳腐化しない情報発信も目指しています。
記事URLをコピーしました