この記事では、コードの同期を実現するためのgit + phpデプロイメントWebhook自動化スクリプトを紹介します
。Webhook自動デプロイメントを使用したGitは高度なテクノロジーではありませんが、初めて自分のデプロイメントで多くの回り道をしました。主に私は新人です。 Linux。この記事はそれを記録します。エラーが発生しやすい問題点、発生したピットは、アクセス可能なWebドメイン名をlnmp環境、サーバー側のphpスクリプト、ウェアハウスコードクラウドgiteeにデプロイする
準備
ができています。
プロセスを自動化するために、ローカルプッシュ-> giteeウェアハウスwebhook-> linuxサーバーphpスクリプトプルは
最初にgiteeコードクラウド上にウェアハウスを作成
し、sshプロトコルを使用してローカルでウェアハウスと通信します。私のローカルはWindowsなので、私はしませんここでssh公開鍵を生成する方法を紹介します。以下はLinuxで紹介されます。
1.gitをインストールします
yum install git
2.ウェアハウスコードのクローンを作成します。「sshプロトコルを使用する必要があり、残りはsshに基づいていることに注意してください」
git init
git clone [email protected]:zhuyanbin/HiAdmin.git
3. Linuxのアクセス許可を変更し、構成を変更します
。Webhookはサーバーが外部訪問者であることをサーバーに通知するため、ここでの管理者ユーザーはデフォルトでwwwユーザーであるため、wwwに十分なアクセス許可を与える必要があります。
vim /etc/passwd
添加下面的一行
www:x:1001:1001::/home/www:/bin/bash
1001はユーザーグループのIDです。次のコマンドを使用して、ユーザーのIDを表示しますwww
cat /etc/group
wwwユーザーをsudoersに追加し、パスワードなしでシェルを実行します
#(1)現在のユーザーのsudoerを作成する権限を追加します
chmod u+w /etc/sudoers
#(2)sudoersを編集する
vim /etc/sudoers
#(3)「rootが任意のコマンドを実行できるようにする」を検索し、rootユーザーに対応する行の下に次のように記述します。
www ALL=(ALL) NOPASSWD:/usr/bin/git
#(4)sudoersへの書き込み許可を取り消す
chmod u-w /etc/sudoers
php-fpm.conf構成を変更して、訪問者を設定します。私はここにいます。これはphpのデフォルト構成です。
4.最後にキーを生成します(このステップはキーを生成するためのwwwユーザーである必要があります、ps:私はこの場所で2日間立ち往生し、ルート管理者アカウントを使用してキーを生成しています。Baiduはいくつかの方法を試しました数日後、wwwに切り替えます。ユーザーがキーを生成した後、すべてがOKです)
公開鍵を生成する
mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa
公開鍵を表示する
cat /home/www/.ssh/id_rsa.pub
生成された公開鍵をgiteeコードクラウドウェアハウスの公開鍵入力場所にコピーし
ますhttps://gitee.com/profile/sshkeys
補足:giteeが公開鍵を入力する場所は2つあり、1つは倉庫の公開鍵です。倉庫に入力すると、サーバーgitの公開鍵にはプル権限のみが付与され、もう1つはアカウントの公開鍵になります。個人アカウントの公開鍵に入力すると、プル、プッシュなどが行われます。権限。私が直接使用する個人アカウントの公開鍵
5。最後に、Webhookドメイン名を入力し、phpスクリプトをアップロード
してWebhook通知アドレスドメイン名を入力します(パスワードは空白に設定され、後でphpでパスワード検証は行われません。セキュリティを検討する場合は、後でパスワードを設定してください)
、phpスクリプトハンドラーhook.phpをアップロードします(linuxコマンドを実行します)
chdir("/home/wwwroot/default/HiAdmin");
exec("git pull origin master 2>&1", $out);
foreach($out as $v)
{
echo iconv( 'GB2312','UTF-8', $v)."<br>";
}
この時点で、上記のサーバーコードを構成した後、自動同期して自動展開を完了することができます。
問題が発生する
1. phpスクリプトが実行され
ません。Linuxスクリプト関数exec()、shell_exec()などの実行を含め、php.iniの多くのphp関数がデフォルトで開かれない理由。php.iniを
検索し、disable_functions行を検索します。対応する関数を削除するか、
2行目をコメントアウトします。gitpullコマンドを実行できません
質問1
ホストキーの検証に失敗しました。
致命的:リモートリポジトリから読み取ることができませんでした。
正しいアクセス権が
あり、リポジトリが存在することを確認してください。
最終的な分析では、まだLinuxのアクセス許可が原因です。私が遭遇したのは、
ここに問題があるということです。ここでの理由は、rootがgit公開鍵キーを生成し、wwwに切り替えた後、公開鍵キーが正常に生成されるためです。 (上記の4番目の小さなステップ)公開鍵を生成するには、wwwを使用して公開鍵を生成する必要があります)
質問2
エラー:リポジトリデータベースにオブジェクトを追加するための不十分な権限.git / objects
致命的:オブジェクトの書き込みに失敗しました
致命的:unpack-objectsが失敗しました
これにはまだgitコマンドを実行する権限がありません。次を実行するだけです
第一步:cd .git/objects 定位到git下的objects文件下
第二步: ls -al 查看git库的所有者(git用户 git组)
第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交
最後に、上記の問題を解決した後、これで完了です。最後に成功したスクリーンショット
。私のバックエンド言語はphpです。Linuxスクリプト、nodejs、pythonなどを実装する方法はたくさんあります。