🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

解決済

1回答

1500閲覧

CircleCIとCapistranoの連携がうまく行かない

garta

総合スコア15

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

1クリップ

投稿2019/12/30 18:17

編集2019/12/30 18:20

git pushをトリガーにCircleCIでテストやbundle exec cap production deploy を走らせたいのですが、
bundle exec cap production deployの実行で躓いてしまいます。
ローカルからCircleCIを介さずにbundle exec cap production deploy を実行すると無事デプロイ完了されるのですが、
具体的には

#!/bin/bash -eo pipefail bundle exec cap production deploy DEBUG [b2c5c796] Running [ -d $HOME/.rbenv/versions/2.5.1 ] as username@ec2のEIP DEBUG [b2c5c796] Command: [ -d $HOME/.rbenv/versions/2.5.1 ] #<Thread:0x00005590a91434c8@/home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true): Traceback (most recent call last): 1: from /home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute' /home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as username@ec2のEIP: Authentication failed for user username@ec2のEIP (SSHKit::Runner::ExecuteError) (Backtrace restricted to imported tasks) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as username@ec2のEIP: Authentication failed for user username@ec2のEIP Caused by: Net::SSH::AuthenticationFailed: Authentication failed for user username@ec2のEIP Tasks: TOP => rbenv:validate (See full trace by running task with --trace) Exited with code exit status 1

となってしまいます。
認証エラーが発生している?ようなのですが、
circleCIのGUIにてec2作成時に取得したキーペアのpemキーは登録済みで、
そのフィンガープリントもconfig.ymlに記載しており、
circleCIのInstalling additional ssh keysはパスしています。
調べてみても手詰まりで、アドバイスいただければ幸いです。

###各環境
rails6,ec2(amazon_linux2),capistrano3.11.2
route53の独自ドメイン取得済みでALBをSSL終端としている
###deploy/production.rb

set :stage, :production set :rails_env, 'production' set :branch, ENV['BRANCH_NAME'] || 'master' set :migration_role, 'db' server "ec2のEIP", user: "username", roles: %w{web app db}, port: 22, ssh_options: { user: "username", # overrides user setting above keys: %w(~/.ssh/id_rsa), forward_agent: true, auth_methods: %w(publickey) # password: "please use keys" }

###config.ymlのcapistrano部分

- add_ssh_keys: fingerprints: - "フィンガープリント" - deploy: name: Capistrano deploy command: | bundle exec cap production deploy

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

アドバイスになりますが、まず対象のEC2にCircleCIのイメージコンテナからssh接続できているのかが気になります。
以下の手順でCircleCIにssh接続できるのでそれでデバッグを試してみてください!

https://qiita.com/yu-croco/items/41d2114c94e3a6ea748a

投稿2020/01/01 07:39

kosa3

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

garta

2020/01/03 08:41

返信遅くなり申し訳ありません、 アドバイスありがとうございます!あけましておめでとうございます。 いただいたアドバイスを参考に、ssh接続を試してみました、 ローカルターミナルからは成功し、EC2からはpermisson deniedが返されてしまっているので、 こちら調べて作業を進めてみようと思います。
garta

2020/01/03 10:07

アドバイスを受けて一度ssh関連を見直してみたのですがうまく接続が行えません。 sshの設定方法としては circleciのssh permissonには秘密鍵、 秘密鍵のHOSTは、ec2インスタンスのEIPで設定。 ec2の.ssh/authorized_keysに公開鍵を記述。 という風に行なっているのですが、 やはりec2からはpermisson deniedとなってしまいます。 鍵については 新規に作成したもの、 githubのsshに使用しているものを試しましたが同様でした。
kosa3

2020/01/03 17:28 編集

おっと、やりたいことはcircleciからcapistranoのデプロイコマンドを叩くと ec2にsshログインしてファイルをサーバーに展開したいのだと思っています。 なのでまずはCircleCIにsshログインした状態で対象のEC2へsshコマンドで接続できるか?(Capistranoに記載しているデプロイユーザで)がアドバイスの内容になります。 これができればcapistranoで叩いてもsshの接続エラーが出ることはないと思います。 (できなければキーの設定、もしくはEC2のセキュリティグループなどを見直してsshログインできるようにしていく感じですかね。) 似たような要件の記事がありましたので共有します。 https://qiita.com/kenkono/items/ef2f93eee713d154285d
garta

2020/01/05 18:05

申し訳ありません、もう一度いただいたアドバイスをよく読んで、 問題を整理しました。 circleciコンテナ内からec2にsshで接続を試みたところ失敗し、 /home/log/secureを確認すると権限関連のエラーが発生していたようで こちらを修正したところcircleciからec2にssh接続に成功しました。 また、circleciでcapistranoのデプロイコマンドを実行させることもこれによって叶いました。 何が問題なのか自分の中でめちゃくちゃになってしまっていたところを、 丁寧なアドバイスいただけたことによって整理できたおかげです。 これでポートフォリオ作業を進めることができます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問