私は、ApacheとGitを使用してDigitalOceanでサーバーを構成するプロジェクトを作成しました。
サーバー上のinitプロジェクトの場合、次のコマンドを実行します。
cd /var/repo
mkdir project-example.git && cd project-example.git
git init --bare
私post-receive
はこのコードでファイルを設定しました:
#!/bin/bash
git --work-tree=/var/temp/project-example --git-dir=/var/repo/project-example.git checkout -f
cd /var/temp/project-example
npm install
npm run build
rm -rf /var/www/project-example/*
mv -f /var/temp/project-example/build/* /var/www/project-example/
ローカルマシンのgitを介してサーバーリモートにプッシュすると、次のエラーが発生します。
remote: hooks/post-receive: line 4: npm: command not found
remote: hooks/post-receive: line 5: npm: command not found
ただし、SSH経由でサーバーにアクセスし、次のコマンドを実行します。
# it works standard
cd /var/repo/project-example.git
source hooks/post-receive
システムサーバー:Ubuntu 14.04
nvm経由でノードをインストールしました。
gitフックが実行されるとき、SSH経由でログインするときと同じPATH変数が設定されているとは限りません。npmを呼び出すときは、スクリプトにnpmへのフルパスを入れてみてください。それは物事を修正する必要があります。
更新(2019年6月7日):
上記のソリューションを使用したときにノードが見つからないという問題がいくつかのコメント投稿者にあり、あまり堅牢ではないことに気づきました。npm自体の呼び出しにパスを配置するのではなく、スクリプトの環境に必要なパスを追加することをお勧めします。たとえば、npm(およびノード)が含まれている場合は/usr/bin/
、npmを呼び出す前にスクリプトに次を追加します。
export PATH=$PATH:/usr/bin
実際、SSH経由でログインしたときと同じようにフックが機能することを確認するためのより堅牢な方法は、ログインしたときのパス(つまり、の出力echo $PATH
)を調べて、にパスを設定することです。それに応じてスクリプトをフックします(もちろん、一部のユーザー固有のパスなどを省略する必要がある場合があります)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加