PHP で Webhook を書くと git が実行できない

小云云
リリース: 2023-03-21 15:08:01
オリジナル
2338 人が閲覧しました

運用保守管理におけるオンライン展開のための視覚的なバージョン管理とコード提出プラットフォームの構築は非常に必要です。この場合、運用保守担当者にとって、Linux ターミナルでコマンド ラインや git ツールを使用するのはあまり便利ではありません。 Webhook 自動デプロイメントまたは Web インターフェイスベースの操作パネルを使用して制御する必要があります。

git 操作を実行するための php webhook

これは単なる単純なデモであり、運用リンクとして使用することはできないことに注意してください

//读取webhookpost提交的数据$data = input('post.');$wdata = [    'ref' => $data['ref'],    'before' => $data['before'],    'after' => $data['after'],    'compare_url' => $data['before']
];//取出需要写入日志的数据if (isset($data['commits'][0])) {    $wdata['commits_id'] = $data['commits'][0]['id'];    $wdata['commits_message'] = $data['commits'][0]['message'];    $wdata['commits_url'] = $data['commits'][0]['url'];    $wdata['commits_author_name'] = $data['commits'][0]['author']['name'];    $wdata['commits_author_email'] = $data['commits'][0]['author']['email'];    $wdata['commits_author_username'] = $data['commits'][0]['author']['username'];    $wdata['commits_committer_name'] = $data['commits'][0]['committer']['name'];    $wdata['commits_committer_email'] = $data['commits'][0]['committer']['email'];    $wdata['commits_committer_username'] = $data['commits'][0]['committer']['username'];
}//如果日志目录不存在则创建这个是为了后期分析日志还是很有必要的//创建目录if (!is_dir("../logs/".$data['repository']['name'])) {
    shell_exec("mkdir ../logs/{$data['repository']['name']}");
}//创建文件if (!file_exists("../logs/{$data['repository']['name']}/".date("Y-m-d").".txt")) {
    shell_exec("touch ../logs/{$data['repository']['name']}/".date("Y-m-d").".txt");
}//写日志文件file_put_contents("../logs/{$data['repository']['name']}/".date("Y-m-d").".txt", implode("|||", $wdata), 2);//看我们的wwwroot目录有没有该项目我的wwwroot目录就是web应用的目录$path = "/data/wwwroot/".$data['repository']['name'];if (!is_dir($path)) {    $commandStr = "cd /data/wwwroot/ && sudo /usr/bin/git clone http://[你自己的git账号]:[你自己的git密码]@git.sikukeji.com/".$data['repository']['full_name'];    $outPut = shell_exec($commandStr);    return Json::create($outPut);
}else{    $commandStr = "cd /data/wwwroot/{$data['repository']['name']} && sudo /usr/bin/git pull";    $outPut = shell_exec($commandStr);    return Json::create($outPut);
}
ログイン後にコピー

キーコードの説明

$commandStr = "cd /data/wwwroot/ && sudo /usr/bin/git clone http://[你自己的git账号]:[你自己的git密码]@git.sikukeji.com/".$data['repository']['full_name'];
ログイン後にコピー

上記のコマンドは、まず作業ディレクトリを /data/ に切り替えますwwwroot ディレクトリ これは私の Web ディレクトリです。 2 番目のコマンド sudo /usr/bin/git clone http://[自分の git アカウント]:[自分の git パスワード]@git.sikukeji.com/”.$data['repository']['full_name '];実際、通常の git コマンドを実行して、オンラインの git コード ベースからコードをローカルに複製しただけです。

問題分析

これを書いた後、実際には、コードには問題はありません。どうしてでしょうか? Linux でコマンドを実行するには sudo を使用しますが、PHP の shell_exec を使用する場合は、root [administrator] パスワードを入力する必要があります。実行するには、パスワードを入力する方法がありません。このときどうすればよいでしょうか? 実際、Linux ではパスワードを入力せずに sudo を使用する方法があります。設定ファイル /etc/sudoers の意味は名前から推測できます

PHP の実行は実際には www ユーザーであるため、自分で git を実行できます。 PHP では、www ユーザーも使用します。www ユーザーがパスワードなしで git を実行できるようにする文は、www ユーザーに、パスワードを入力せずにすべてのコンピューターで git を実行することを許可します。 /sudoers に関するその他の操作については、関連情報を自分で確認してください


ご質問がある場合は、weiyongqiang@weiyongqiang.com までメールをお送りくださいPHP で Webhook を書くと git が実行できない

関連する推奨事項:

PHP で Webhook を書くと git が実行できない Webhook を使用したコードのデプロイについて

以上がPHP で Webhook を書くと git が実行できないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート