Préparatifs Github
1. Ajouter des webhooks dans les paramètres de l'entrepôt
Prenons l'exemple d'un entrepôt privé :
1. Après avoir créé l'entrepôt, cliquez sur paramètres.
Définir le chemin d'accès aux webhooks :
En prenant mon propre projet comme exemple, le framework utilise tp6. Créez un fichier nommé basic.php sous public/, qui est un fichier auquel GitHub peut accéder et exécuter lorsque le code est transmis au serveur.
Ce fichier est utilisé pour exécuter des commandes shell Lorsque le lien est déclenché, les commandes du fichier sont automatiquement exécutées, réalisant ainsi un git pull automatique.
2. Testez si le lien est valide et si le fichier a été consulté
Comme le montre l'image ci-dessus, lorsque le vert ✅ apparaît, cela signifie que le lien a été consulté, lorsque la marque rouge ⚠️ apparaît, cela signifie que le fichier n'a pas été consulté. Utilisez-le pour vérifier s'il y a un problème de lien ou un problème de code.
-
[x] Github est maintenant terminé.
Déploiement de code PHP
1. Ajoutez un fichier hook et exécutez la commande shell
Certaines sont présentées ci-dessous
内联代码片
.
<?php //git webhook 自动部署脚本 $requestBody = file_get_contents("php://input"); //接收数据 if (empty($requestBody)) { //判断数据是不是空 die('send fail'); } $content = json_decode($requestBody, true); //数据转换 //若是主分支且提交数大于0 if ($content['ref']=='refs/heads/main') { //或将命令加入 shell里,看个人需求 git reset --hard origin/master && git clean -f $res = shell_exec('cd /www/wwwroot/xxxx/ && echo `sudo git pull` >> b.log');//PHP函数执行git命令 $res_log = '-------------------------'.PHP_EOL; $res_log .= ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push'.$res; file_put_contents("git-webhook.txt", $res_log, FILE_APPEND);//将每次拉取信息追加写入到日志里 } ?>
-
[x] À ce stade, la partie shell php de la commande est terminée et peut être déboguée en fonction des différents besoins du projet.
Gestion des erreurs courantes
1. Le shell n'est pas désactivé dans le fichier .php.ini Cette erreur est relativement courante et peut être facilement trouvée lors du débogage, je n'entrerai donc pas dans les détails. détails ici.
Méthode de traitement : Supprimez shell_exec dans php.ini et redémarrez le service.
2. Problème d'autorisation .git, modifiez le groupe d'autorisations de fichier dans le répertoire .git/ en www
Généralement, il n'apparaîtra pas. Lorsqu'une erreur d'autorisation se produit, il est recommandé de vérifier si. le répertoire de fichiers est le groupe d'autorisations que vous avez défini. Sinon, vous pouvez utiliser la commande suivante pour modifier le groupe d'autorisations de fichier
//以www用户组为例 chown -R www:www file/
3. Problème de groupe d'autorisations
Vérifiez étape par étape. sont sûrs qu'il n'y a pas de problème avec le processus précédent mais que le code ne fonctionne toujours pas automatiquement. Lors de l'extraction, exécutez manuellement le shell ci-dessus. Si le code est extrait avec succès, le problème du shell peut être éliminé. Ouvrez l'enregistrement du journal. Si le contenu de l'enregistrement du journal est vide, vous pouvez essayer de remplacer l'ancienne version par la nouvelle version
4. Une erreur similaire à l'échec de la vérification de la clé d'hôte.^M fatal : impossible. lire à distance apparaît. rep......
C'est parce qu'il y a un problème avec la clé d'autorisation La clé publique pour se connecter à github n'est pas créée dans le groupe d'autorisation www
L'auteur ici. utilise cette méthode pour le résoudre. S'il y a un grand patron. Si vous avez d'autres solutions, veuillez laisser un message en message privé ou dans la zone de commentaires.
vim Ouvrez /etc/sudoers Ajoutez une ligne de www sous root pour exécuter les autorisations sudo sans mot de passe
5. Terminé, maintenant votre webhook. est Il est prêt à fonctionner. Modifiez le fichier, soumettez-le et interrogez le journal.
Environnement local centos + php7.3 + nginx