質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

89.08%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 643

garta

score 13

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@ec2EIP: Authentication failed for user username@ec2EIP (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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/03 17:41

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

    キャンセル

  • 2020/01/03 19:07

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

    キャンセル

  • 2020/01/04 02:27 編集

    おっと、やりたいことはcircleciからcapistranoのデプロイコマンドを叩くと
    ec2にsshログインしてファイルをサーバーに展開したいのだと思っています。

    なのでまずはCircleCIにsshログインした状態で対象のEC2へsshコマンドで接続できるか?(Capistranoに記載しているデプロイユーザで)がアドバイスの内容になります。
    これができればcapistranoで叩いてもsshの接続エラーが出ることはないと思います。
    (できなければキーの設定、もしくはEC2のセキュリティグループなどを見直してsshログインできるようにしていく感じですかね。)

    似たような要件の記事がありましたので共有します。
    https://qiita.com/kenkono/items/ef2f93eee713d154285d

    キャンセル

  • 2020/01/06 03:05

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

    キャンセル

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

  • ただいまの回答率 89.08%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る