Heim  >  Artikel  >  Backend-Entwicklung  >  Beim Schreiben eines Webhooks in PHP kann Git nicht ausgeführt werden

Beim Schreiben eines Webhooks in PHP kann Git nicht ausgeführt werden

小云云
小云云Original
2018-03-16 11:14:422291Durchsuche

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.

Webhook für PHP zum Ausführen von Git-Operationen

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);
}

Erklärung des Schlüsselcodes

$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 sudo

Wir 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 Beim Schreiben eines Webhooks in PHP kann Git nicht ausgeführt werden

Geben Sie ein Passwort ein. Bitte überprüfen Sie die zugehörigen Vorgänge selbst auf /etc/sudoers

Beim Schreiben eines Webhooks in PHP kann Git nicht ausgeführt werdenWenn Sie Fragen haben, können Sie mir eine E-Mail an weiyongqiang@weiyongqiang.com senden 🎜>

www     ALL=NOPASSWD:/usr/bin/git
Verwandte Empfehlungen:

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn