運用保守管理におけるオンライン展開のための視覚的なバージョン管理とコード提出プラットフォームの構築は非常に必要です。この場合、運用保守担当者にとって、Linux ターミナルでコマンド ラインや git ツールを使用するのはあまり便利ではありません。 Webhook 自動デプロイメントまたは Web インターフェイスベースの操作パネルを使用して制御する必要があります。
これは単なる単純なデモであり、運用リンクとして使用することはできないことに注意してください
//读取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 の意味は名前から推測できます
ご質問がある場合は、weiyongqiang@weiyongqiang.com までメールをお送りください
Webhook を使用したコードのデプロイについて
以上がPHP で Webhook を書くと git が実行できないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。