Maison  >  Article  >  développement back-end  >  L'écriture d'un webhook en PHP ne peut pas exécuter git

L'écriture d'un webhook en PHP ne peut pas exécuter git

小云云
小云云original
2018-03-16 11:14:422337parcourir

Il est très nécessaire de créer une plate-forme visuelle de contrôle de version et de soumission de code pour le déploiement en ligne dans la gestion de l'exploitation et de la maintenance. Dans ce cas, il n'est pas très pratique pour le personnel d'exploitation et de maintenance d'utiliser la ligne de commande ou l'outil git dans le terminal Linux. La façon dont nous avons besoin est d'utiliser le déploiement automatique d'un webhook ou un panneau de commande basé sur une interface Web pour contrôler.

Webhook pour php pour effectuer des opérations git

Notez qu'il ne s'agit que d'une simple démo et ne peut pas être utilisé comme lien de production

//读取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);
}

Explication du code clé

$commandStr = "cd /data/wwwroot/ && sudo /usr/bin/git clone http://[你自己的git账号]:[你自己的git密码]@git.sikukeji.com/".$data['repository']['full_name'];

La commande ci-dessus bascule d'abord le répertoire de travail vers le répertoire /data/wwwroot, qui est mon répertoire Web. La deuxième commande sudo /usr/bin/git clone http://[votre propre compte git]:[votre propre mot de passe git]@git.sikukeji.com/”.$data['repository']['full_name ']; En fait, exécutez simplement la commande git habituelle et clonez le code de notre base de code git en ligne vers le local

Analyse des problèmes

Après avoir écrit ceci, il n'y a aucun problème avec le code. le webhook n'est pas exécuté, pourquoi ? Lorsque nous exécutons git, nous ajoutons sudo pour exécuter la commande en tant qu'administrateur système. Nous savons que lorsque vous utilisez sudo sous Linux, vous devez entrer le mot de passe root [administrateur]. qu'on fait quand on utilise le shell_exec de PHP pour saisir un mot de passe ? En fait, il existe un moyen d'utiliser sudo pour exécuter certaines commandes sans saisir de mot de passe

Linux est gratuit. utilisez sudo

Nous avons besoin du fichier de configuration /etc/sudoers. D'après le nom de ce fichier, nous pouvons deviner sa signification
Lécriture dun webhook en PHP ne peut pas exécuter git

Ajouter la commande git sans mot de passe<.>

Parce que notre exécution PHP utilise en fait l'utilisateur www. Ensuite, l'utilisateur www est également utilisé pour exécuter git en PHP sans mot de passe. >Lécriture dun webhook en PHP ne peut pas exécuter git

. Cette phrase autorise l'utilisateur www à exécuter git en tant qu'administrateur sur tous les ordinateurs sans saisir de mot de passe. Veuillez vérifier vous-même les opérations associées pour plus d'opérations sur /etc/sudoers. 🎜>
www     ALL=NOPASSWD:/usr/bin/git
Si vous avez des questions, vous pouvez m'envoyer un e-mail à weiyongqiang@weiyongqiang.com

Recommandations associées :

À propos de github utilisant le webhook Problèmes de déploiement coder

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn