Comment implémenter le déploiement automatisé de scripts php : 1. Installez git ; 2. Clonez le code de l'entrepôt ; 3. Changez les autorisations Linux et modifiez la configuration ; 4. Ajoutez l'utilisateur www aux sudoers ; . Remplissez le nom de domaine du webhook, téléchargez le script php.
L'environnement d'exploitation de cet article : système Linux5.9.8, Git version 2.30.0, ordinateur DELL G3
Comment implémenter le déploiement automatisé git de scripts php ?
git+php déployer un webhook automatisé scripts pour réaliser la synchronisation du code
Cet article présentera git+php pour déployer des scripts automatisés de webhook pour réaliser la synchronisation du code
Git avec le déploiement automatisé de webhook n'est pas une technologie sophistiquée, mais j'ai fait de nombreux détours lors de mon premier déploiement, je suis principalement considéré comme un novice sous Linux. Cet article enregistre les problèmes et les pièges sujets aux erreurs
Préparation
Déployer des noms de domaine Web accessibles, des scripts php côté serveur et des processus automatisés de code d'entrepôt cloud. dans l'environnement lnmp, local push->gitee Warehouse webhook->linux server php script pull
Utilisez le protocole ssh pour communiquer avec l'entrepôt localement. Mon ordinateur local est Windows, je ne le ferai pas. présentez ici comment générer l'adresse publique ssh. Clé, qui sera introduite sous Linux ci-dessous
1. Installez git
yum install git
2 Clonez le code de l'entrepôt "Notez que vous devez utiliser le protocole ssh, le reste est basé sur ssh. "
git initgit clone git@gitee.com:zhuyanbin/HiAdmin.git
3. Changez les autorisations Linux et modifiez la configuration
Parce que nous Le webhook informe le serveur qu'il s'agit d'un accès externe, donc l'utilisateur administrateur ici est l'utilisateur www par défaut, donc www doit recevoir des autorisations suffisantesvim /etc/passwd 添加下面的一行 www:x:1001:1001::/home/www:/bin/bash
cat /etc/group
Ajoutez l'utilisateur www aux sudoers et exécutez le shell sans mot de passe
#(1) Ajoutez l'autorisation d'écrire des sudoers dans le utilisateur actuel
chmod u+w /etc/sudoers
#(2) Modifier sudoers
vim /etc/sudoers
#(3) Recherchez Autoriser root à exécuter n'importe quelle commande n'importe où, écrivez le contenu suivant sous la ligne correspondante de l'utilisateur root :
www ALL=(ALL) NOPASSWD:/usr/bin/git
#(4) Reprendre l'autorisation d'écriture à sudoers
chmod u-w /etc/sudoers
Modifier la configuration de php-fpm.conf pour définir le visiteur, mon voici www, également C'est la configuration par défaut de php
4. Enfin générer la clé (cette étape doit soyez l'utilisateur www pour générer la clé, ps : je suis bloqué à cet endroit depuis deux jours et j'utilise le compte administrateur root pour la générer. Baidu a passé plusieurs jours, a essayé diverses méthodes, puis est passé au www. utilisateur pour générer la clé et tout était ok)
Générer la clé publique
mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa
Afficher la clé publique
cat /home/www/.ssh/id_rsa.pub
Copiez la clé publique générée dans la clé publique de l'entrepôt du cloud de code gitee Remplissez l'endroit
https://gitee. com/profile/sshkeys
Supplément : Il y a deux endroits où gitee peut remplir la clé publique. L'un est la clé publique de l'entrepôt. Si vous remplissez la clé publique de l'entrepôt, l'autorisation git côté serveur le sera. seulement l'autorisation pull, et l'autre est la clé publique du compte. Si vous remplissez la clé publique de votre compte personnel, vous aurez les autorisations pull, push et autres. J'utilise la clé publique du compte personnel directement ici 5. . Enfin, remplissez le nom de domaine du webhook et téléchargez le script php
Remplissez le nom de domaine de l'adresse de notification du webhook (le paramètre de mot de passe est vide, il n'y aura pas de vérification du mot de passe en php plus tard, si vous pensez à la sécurité, veuillez définir le mot de passe plus tard)
Accédez au gestionnaire de script php hook.php (exécutez la commande Linux)
chdir("/home/wwwroot/default/HiAdmin"); exec("git pull origin master 2>&1", $out); foreach($out as $v) { echo iconv( 'GB2312','UTF-8', $v)."<br>"; }
1. Le script php n'est pas exécuté
La raison en est que de nombreuses fonctions PHP dans php.ini ne sont pas ouvertes par défaut, y compris l'exécution de la fonction de script Linux exec() shell_exec(), etc. Recherchez php.ini, recherchez les fonctions désactivées. et supprimez la fonction correspondante, ou commentez la ligne entière
2. Impossible d'exécuter la commande git pull
Problème 1
La vérification de la clé de l'hôte a échoué.
fatal : impossible de lire à partir du référentiel distant. Veuillez vous assurer vous disposez des droits d'accès corrects
et le référentiel existe.
归根结底还是因为linux权限的问题,我遇到的是出现一下问题
到这里的原因是因为root生成git公钥密钥,而切换到www后生成公钥密钥后就成功了(上述第四小步生成公钥,一定使用www生成公钥密钥)
问题二
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed
这个还是没有权限执行git命令,只需要执行以下
第一步:cd .git/objects 定位到git下的objects文件下 第二步: ls -al 查看git库的所有者(git用户 git组) 第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交
最后解决完以上问题,大功告成,上一张成功的截图
自己的后端语言是php,这里可以用多种方式去实现执行linux脚本,nodejs,python等等
推荐学习:《PHP视频教程》
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!