73233


GithubにプッシュしてCircleCIで自動デプロイをしたときに正常にビルドは完了しましたが以下のエラーが出てしまいます。

[code]

    #!/bin/bash -eo pipefail
    ssh -o StrictHostKeyChecking=no -t webapp@${HOST_NAME} "cd laravel && \
      git pull origin master && \
      composer install -n --no-dev --prefer-dist && \
      npm ci && \
      npm run prod && \
      php artisan migrate --force && \
      php artisan config:cache"
    Warning: Permanently added '*************' (ECDSA) to the list of known hosts.
    ^@^@remote: Enumerating objects: 29, done.        
    remote: Counting objects: 100% (29/29), done.        
    remote: Compressing objects: 100% (7/7), done.        
    remote: Total 17 (delta 10), reused 16 (delta 10), pack-reused 0        
    Unpacking objects: 100% (17/17), done.                                          
    From github.com:Tikka710/Laravel-ci
     * branch            master     -> FETCH_HEAD
       a935525..4dbc765  master     -> origin/master
    Updating c4b465a..4dbc765
    error: Your local changes to the following files would be overwritten by merge:
        composer.json
    Please commit your changes or stash them before you merge.
    Aborting
    Connection to ************* closed.
    
    Exited with code exit status 1
    
[/code]

composer.jsonがコミットできていないという事だと思いますが。どのようにすれば解決しますでしょうか？


CC BY-SA 4.0
2021-01-08T03:53:03.470
73151
2021-01-12T00:38:22.980
39431
question
laravel circleci
CircleCIでの自動デプロイが反映されず、Your local changes to the following files would be overwritten by merge:というエラーがでてしまう


もっとも大事なことはgit pull をソース展開の手順とするのであれば、  
本番環境の修正は直接行ってはいけない運用を徹底する必要があります。  
どんなデプロイ手順でもそうですが、正規以外のデプロイ手順を取るとアプリは壊れてそれが障害につながります。  
これが自動化CI/CDの基本になりますので注意しましょう。

今回の戻し方については  
git pullを利用してソースの更新を実行しようとしていらっしゃいますが、  
リモートのサーバのファイルに修正がありpullが実行されないものと思います。

gitの履歴とコンフリクトが起きる可能性がある修正がある状態で、pullしようとすると該当のエラーが発生します。  
gitで管理している以上はその歴史（コミット修正）とは違う修正の歴史があるとコンフリクトが起こるのでマージ作業が必要です。

ただ今回の場合は本番環境でコンフリクトが起きてしまっているので、本番環境でマージを直そうとすると一時的にアプリが動かなくなる可能性があるので手順としては

（１）一旦本番で行った修正をgitに取り込む。  
（２）本番の修正を戻してgitの現在いるコミットと同じ状態にする  
（３）もう一度履歴を取り込む  
という作業が必要です。

もともとAというコミットにいたとすると  
今回の開発修正でBが修正されたとしましょう。

A→B

しかしながら本番を修正してしまって  
いつの間にかCの状態になっているのです。  
A→C

そこでまず（１）の作業でCの修正をBのコミットに追加します。  
A→B→C´  
ここで注意点はC´（ダッシュ）なのでCの修正ではないのです。  
なのでこのままマージしようとしてもコンフリクトが起こります。

なので（２）の作業で本番環境をAに戻します。  
これはgit resetかもし修正をしてcommitをしていないのであればgit checkoutでファイルを戻すことができます。  
ただ戻す場合は本番環境のソースを一時的に修正することになるのでその動作をしてアプリが問題なく動くか確認しておく必要があります。

最後に（３）の作業で改めてgit pullを実行します。  
ここまでくれば新しいアプリが展開できるでしょう


CC BY-SA 4.0
2021-01-12T00:38:22.980
73233
2021-01-12T00:38:22.980
22665
73151
answer