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.
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); }
$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
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
Nous avons besoin du fichier de configuration /etc/sudoers. D'après le nom de ce fichier, nous pouvons deviner sa signification
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. >
. 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
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!