Es ist unbedingt erforderlich, eine visuelle Versionskontroll- und Codeübermittlungsplattform für die Online-Bereitstellung im Betriebs- und Wartungsmanagement aufzubauen. In diesem Fall ist es für das Betriebs- und Wartungspersonal nicht sehr praktisch, die Befehlszeile oder das Git-Tool im Linux-Terminal zu verwenden. Wir benötigen zur Steuerung die automatische Webhook-Bereitstellung oder ein auf der Webschnittstelle basierendes Bedienfeld.
Beachten Sie, dass dies nur eine einfache Demo ist und nicht als Produktionslink verwendet werden kann
//读取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'];
Der obige Befehl wechselt zunächst das Arbeitsverzeichnis in das Verzeichnis /data/wwwroot, das mein Webverzeichnis ist. Der zweite Befehl sudo /usr/bin/git clone http://[Ihr eigenes Git-Konto]:[Ihr eigenes Git-Passwort]@git.sikukeji.com/“.$data['repository']['full_name ']; Tatsächlich führen Sie einfach den regulären Git-Befehl aus und klonen den Code von unserer Online-Git-Codebasis auf den lokalen Computer. Der Webhook wird nicht ausgeführt. Wenn wir Git ausführen, wird Sudo verwendet, um den Befehl auszuführen Wir wissen, dass Sie bei der Verwendung von sudo unter Linux das Root-Passwort [Administrator] eingeben müssen. Was sollten wir tun, wenn wir PHPs Shell_exec verwenden, um ein Passwort einzugeben? sudo, um bestimmte Befehle ohne Eingabe eines Passworts auszuführen
Linux ist kostenlos. Geben Sie das Passwort ein und verwenden Sie sudoWir benötigen die Konfigurationsdatei /etc/sudoers , wir können seine Bedeutung erraten
Git-Befehl ohne Passwort hinzufügen
Weil unsere PHP-Ausführung tatsächlich den www-Benutzer verwendet Dann wird der WWW-Benutzer auch verwendet, um Git in PHP ohne Passwort auszuführen. Der Satz im Bild lautet
Wenn Sie Fragen haben, können Sie mir eine E-Mail an weiyongqiang@weiyongqiang.com senden 🎜>
www ALL=NOPASSWD:/usr/bin/git
Über Github mit Webhook Probleme beim Bereitstellen von Code?
Das obige ist der detaillierte Inhalt vonBeim Schreiben eines Webhooks in PHP kann Git nicht ausgeführt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!