Git + phpは、コードの同期を実現するためにWebhook自動化スクリプトをデプロイします

この記事では、コードの同期を実現するための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などを実装する方法はたくさんあります。

おすすめ

転載: blog.csdn.net/qq_41526316/article/details/107223956