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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SSH

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Circle CI

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

Q&A

解決済

1回答

3669閲覧

circleci経由でEC2にSSHするとそれ以降のコマンドが実行されない

uchida_yuma

総合スコア44

SSH

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Circle CI

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

0グッド

3クリップ

投稿2019/09/25 06:48

前提・実現したいこと

githubのプライベートリポジトリのstageブランチにマージされたタイミングでテスト環境に自動デプロイされるようにしたい。

現在AWSのEC2でPHP + reactのテスト環境があり、circleciでテスト環境に自動デプロイできるようなコードを書いています。

具体的な方法としてはcircleciからEC2へSSHで接続し、該当のディレクトリに移動後、git pullを実行するようなものです。

しかし、SSH接続はできるものの、その後のコマンドが実行されずに困っています。
同じような現象に見舞われた方は解決策を共有していただけると大変助かります。

発生している問題・エラーメッセージ

Too long with no output (exceeded 10m0s)

イメージ説明

該当のソースコード

sshキーの設定

イメージ説明説明]

ホストとユーザー名の設定

イメージ説明

configyml

1# PHP CircleCI 2.0 configuration file 2# 3# Check https://circleci.com/docs/2.0/language-php/ for more details 4# 5version: 2 6jobs: 7 build: 8 docker: 9 # specify the version you desire here 10 - image: circleci/php:7.3.8-apache-node-browsers 11 - image: circleci/mysql:5.7 12 13 # Specify service dependencies here if necessary 14 # CircleCI maintains a library of pre-built images 15 # documented at https://circleci.com/docs/2.0/circleci-images/ 16 # - image: circleci/mysql:9.4 17 18 environment: 19 - APP_DEBUG: true 20 - APP_ENV: testing 21 - APP_KEY: ************************************************* 22 - DB_CONNECTION: circle_test 23 - APP_URL: http://localhost:8000 24 - MYSQL_ALLOW_EMPTY_PASSWORD: true 25 26 working_directory: ~/repo 27 28 steps: 29 - checkout 30 31 # Install PHP Extension 32 - run: sudo docker-php-ext-install pdo_mysql 33 34 # Download and cache dependencies 35 - restore_cache: 36 keys: 37 - v1-dependencies-{{ checksum "composer.json" }} 38 # fallback to using the latest cache if no exact match is found 39 - v1-dependencies- 40 41 - run: composer install -n --prefer-dist 42 43 - save_cache: 44 paths: 45 - ./vendor 46 key: v1-dependencies-{{ checksum "composer.json" }} 47 48 - run: php artisan config:cache 49 - run: php artisan migrate 50 - run: php artisan db:seed 51 52 #circleCIのchromeは72なので、合わせる 53 - run: php artisan dusk:chrome-driver 72 54 55 # run tests! 56 - run: php ./vendor/bin/phpunit 57 - run: 58 name: Start Chrome Driver 59 command: ./vendor/laravel/dusk/bin/chromedriver-linux 60 background: true 61 - run: 62 name: Run Laravel Server 63 command: php artisan serve 64 background: true 65 - run: 66 name: Run Laravel Dusk Tests 67 command: php artisan dusk 68 69 stage_deploy: 70 machine: 71 image: circleci/classic:edge 72 steps: 73 - checkout 74 # CircleCIに登録した秘密鍵を呼び出す。 75 - add_ssh_keys: 76 - run: 77 name: ssh 78 command: ssh ${USER_NAME}@${HOST_NAME} && cd /var/www/develop && git pull 79# テストが成功した場合のみ、deployを実行 80workflows: 81 version: 2 82 build_and_deploy: 83 jobs: 84 - build 85 - stage_deploy: 86 requires: 87 - build 88 # masterブランチがpushされた場合のみdeployするようにする。 89 filters: 90 branches: 91 only: stage 92 - production_deploy: 93 requires: 94 - build 95 # masterブランチがpushされた場合のみdeployするようにする。 96 filters: 97 branches: 98 only: master 99

試したこと

  • ssh接続できるユーザーを自分で作ったユーザーとEC2デフォルトのubuntuユーザーで接続
- run: name: ssh command: ssh ${USER_NAME}@${HOST_NAME} && cd /var/www/develop && git pull

ではなく。

- run: name: ssh command: ssh ${USER_NAME}@${HOST_NAME} - run: name: cd command: cd /var/www/develop - run: name: pull command: git pull

のように分割したのですが、結果は同じでした。

以上です、どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

shell

1ssh ${USER_NAME}@${HOST_NAME} && cd /var/www/develop && git pull

これだとSSHログインした時点でコマンド待受状態になって止まらないですかね?
そして恐らくSSHのプロセスが完了したら(コマンド待受状態のまま何も入力されないので実際には完了しないと思いますが…)ローカルで以後のコマンドが実行されるはずです。
&&でコマンドをつなぐと、前段のコマンドが正常終了したときに次のコマンドを実行する流れになるので、上記のように指定するとSSHのプロセスがいつまで経っても終わらずにタイムアウトするものと思われます。

やりたいことはSSHした先のサーバで以後のコマンドを実行することですよね。
それであれば以下のようにすれば行けると思います。

shell

1ssh ${USER_NAME}@${HOST_NAME} "cd /var/www/develop && git pull"

このように、SSHコマンドの後にコマンドを指定すると、SSHした先でそのコマンドを実行することができます。

ちょうど調べたら似たようなことをしているものが見つかったので参考までに貼り付けておきます。

投稿2019/09/25 09:52

編集2019/09/25 09:57
yu_1985

総合スコア7427

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

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

uchida_yuma

2019/09/25 11:29

ご提示の方法で無事デプロイする事ができました! 誠にありがとうございますm(_ _ )m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問