AWS備忘録8.5~circleCI・EC2にデプロイ~

前回、circleCIの公式のドキュメントに沿って実践してみましたが、今回はEC2にデプロイしてみようと思います。

とはいえググってもなかなかEC2とcircleCIの連携は出ず...。探している中で良さそうな記事があったので、参考にさせていただこうと思います!

config.ymlを変更する

リポジトリとconfig.ymlは前回作ったものを使います。

ここでコードを参考にするも、内容がイマイチ分からない...(ちゃんと解説のコメント載ってるじゃん!)

version: 2

jobs:
   build:
       docker:
           - image: alpine
       steps:
           - checkout
           - run:
               name: Echo Test
               command: echo "CircleCI EC2 Test"
   # EC2 に SSH 接続・デプロイを実行
   deploy:
       machine:
           image: circleci/classic:edge
       steps:
           - checkout
           - add_ssh_keys:
           - run: ssh ${USER_NAME}@${HOST_NAME} 'cd ~/working && git pull origin master'

workflows:
   version: 2
   build_and_deploy:
       jobs:
           - build
           - deploy:
               requires:
                   - build
               # master ブランチに push された場合のみ deploy
               filters:
                   branches:
                       only: master

少し調べながらメモって行きます。

・alpine

dockerのベースイメージ。ubuntuなど他のベースに比べるとサイズをとても小さくすることができる!

・name:

runのキー。circleCI上での表示に使われる。

・command:

実行するコマンドを定義する。

・circleci/classic:edge

docker、それと CircleCI のビルドイメージに含まれる共通言語ツールを含んだ Ubuntu v14.04 のイメージ。

かなり浅めですが、大まかに理解して実践してみようと思います。

秘密鍵と公開鍵を作成する

circleCIでSSH接続するのに秘密鍵と公開鍵が必要になるので先に作成します。

EC2に接続し、既に id_rsa.pub と id_rsa が無いか確認します。

$ ls ~/.ssh

無ければ作成します。.sshに移って以下のコマンドを打ちます。

$ ssh-keygen -m pem

Enterを押していくとpemファイルが作成されます。catコマンドでid_rsa.pubの中身を~./ssh/authorized_keysに追加します。

$ cat id_rsa.pub >> authorized_keys

GitHubに公開鍵を登録する

githubにログインしてSettingsをクリックします。

vpcウィザード

Personal settingsのSSH and GPG keysをクリックします。

先ほど作ったid_rsa.pubをcatコマンドで表示してコピーをします。

$ cat id_rsa.pub

New SSH Keyで公開鍵を追加します。

githubに公開鍵を追加できたので、EC2からSSH接続をしようとするもエラーが出ました。

[ec2-user@ip-10-0-0-150 .ssh]$ ssh -T git@github.com
The authenticity of host 'github.com (52.69.186.44)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.

どうやら初回でSSH接続したときに正しいサーバーかどうか聞いているようです。fingerprintとはSSHサーバーの公開鍵を識別するのに利用されているようです。

解決法を探していたところ、fingerprintの確認フローをスキップする方法があったので試してみました。

$ ssh-keyscan github.com >> ~/.ssh/known_hosts

実行するとknown_hostsという、接続したことのある各ホストの公開鍵を保存しているファイルにサーバーのfingerprintが登録されるようです。

改めてgithubに接続すると、無事成功しました。

[ec2-user@ip-10-0-0-150 .ssh]$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '52.192.72.89' to the list of known hosts.
Hi kamiyama-github! You've successfully authenticated, but GitHub does not provide shell access.

circleCIの環境変数とSSHの設定

プロジェクト名横の歯車マークをクリック、BUILD SETTINGSのEnvironment Variablesをクリックします。

Add VariableからNameとValueを設定します。2種類追加し、それぞれSSH接続するときのIPアドレスとユーザー名を設定します。

・Name → HOST_NAME  Value → IPアドレス

・Name → USER_NAME  Value → ec2-user(例)

次はSSH Permissionsをクリックして秘密鍵を登録します。Add SSH KeyからIPアドレスと秘密鍵を追加します。

秘密鍵の内容はcatコマンドで表示してコピーをします。

$ cat id_rsa

-----BEGIN RSA PRIVATE KEY-----から-----END RSA PRIVATE KEY-----までコピーをします。

Githubにプッシュ、circleCIの確認

何回かgitのブランチ、マージあたりのエラーで躓いてしまい、一旦ローカルとリモートのリポジトリを作り直しました。gitの勉強も並行して進めていきたいです...。

今回はあらかじめEC2に作成していたプロジェクト先に.circleci/config.ymlを作り、githubにディレクトリごとプッシュしました。

プッシュする前についつい忘れがちですが、~/.gitconfigにユーザー名とメールアドレスを登録しておきます。

$ git config --global user.name "ユーザー名"

$ git config --global user.email メールアドレス

プロジェクトのディレクトリに移り、プッシュします。

$ git init

$ git remote add origin リポジトリのURL

$ git add プロジェクトのファイルorディレクトリ

$ git commit -a -m "コメント"

$ $ git push origin master

circleCIのダッシュボードを見ると、無事成功していました。

vpcウィザード

今回、流れをつかむため参考のコードをそのまま書き直して使いましたが、一通りAWS関連の勉強が終わったら細かいテストなどを実装にチャレンジしていきたいなと思います。

この記事が気に入ったらサポートをしてみませんか?